Do While Schleife über Pushbutton abbrechen
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Do While Schleife über Pushbutton abbrechen
wieder was,
wie kann ich eine Do While Schleife mit einem Pushbutton-Klick abbrechen?
Ich habe eine Do While Schleife, in der Daten in eine DB geschaufelt werden. Jetzt möchte ich diese Vorgang mittels eines Pushbuttons abbrechen. Der Pushbutton reagiert aber nicht. Wie kriege ich den dazu, dass der auf einen Mausklick reagiert?
wie kann ich eine Do While Schleife mit einem Pushbutton-Klick abbrechen?
Ich habe eine Do While Schleife, in der Daten in eine DB geschaufelt werden. Jetzt möchte ich diese Vorgang mittels eines Pushbuttons abbrechen. Der Pushbutton reagiert aber nicht. Wie kriege ich den dazu, dass der auf einen Mausklick reagiert?
Zuletzt geändert von Manfred am Mo, 15. Jun 2009 18:40, insgesamt 2-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
Manfred,
die DO WHILE (oder den Dialog) in einem extra Thread() laufen lassen, bei Klick eine Abbruchbedingung setzen.
Viele Grüße,
Martin
die DO WHILE (oder den Dialog) in einem extra Thread() laufen lassen, bei Klick eine Abbruchbedingung setzen.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
Da habe ich mich deshalb von fern gehalten bisher, weil ich nicht verstehe, wie ich dem Thread die schon geöffneten DB übergeben kann.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
Wozu das?
Du hast eine Do while nach folgendem Schema (im Prinzip):
dann musst Du in dem Thread, in dem Dein Dialogfenster mit dem PushButton liegt, beim Klicken nur die gloable Variable lAbbruch auf .T. setzen!
Es geht natürlich auch eleganter - mit zwei getrennten Threads, bei denen Du dann aus dem einen heraus beim Klicken auf den Button den anderen beendest...
Viele Grüße,
Martin
Du hast eine Do while nach folgendem Schema (im Prinzip):
Code: Alles auswählen
lAbbruch := .F.
DO WHILE .NOT. ( cDB->( EOF() ) .or. lAbbruch )
...
Es geht natürlich auch eleganter - mit zwei getrennten Threads, bei denen Du dann aus dem einen heraus beim Klicken auf den Button den anderen beendest...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
ach so,
ich dachte ich sollte die ganze Schleife samt Db usw.in einen Thread legen. Ich habe mir schon Dbrelease() und Dbrequest() durchgelesen, konnte aber nicht wirklich was damit anfangen.
ich dachte ich sollte die ganze Schleife samt Db usw.in einen Thread legen. Ich habe mir schon Dbrelease() und Dbrequest() durchgelesen, konnte aber nicht wirklich was damit anfangen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
Nun,
wenn beides in einem Thread laufen würde, würde die DO WHILE ja den Eventhandler blocken...
Viele Grüße,
Martin
wenn beides in einem Thread laufen würde, würde die DO WHILE ja den Eventhandler blocken...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
was ist denn hier dran verbesserungswürdig?
ich weiß jetzt gar nicht, wie ich den Thread schließen muß
ich weiß jetzt gar nicht, wie ich den Thread schließen muß
Code: Alles auswählen
********************************************************************************
FUNCTION suchen(oBrowse,cWoher)
LOCAL lErfolg := .T.
LOCAL nZeichenLaenge
LOCAL oThread
MEMVAR lAbbruch
MEMVAR oGenre
MEMVAR oKdinfotemp
MEMVAR oMessage
MEMVAR oSysteme
MEMVAR oVo
MEMVAR oVostamm
lAbbruch := .F.
IF Empty(oVostamm:oV_Darstell:editbuffer()) .AND. Empty(oVostamm:oV_titel:editbuffer())
RETURN(.F.)
ENDIF
SetAppFocus(oBrowse)
oKdInfoTemp:schliesse_datenbank()
oKdinfotemp:db_oeffnen(,,.T.) // immer vorher leer machen
IF Upper(cWoher) == "V_DARSTELL"
oVostamm:indexfocus("darst")
nZeichenLaenge := Len(oVostamm:oV_Darstell:editbuffer()) + 1
oVostamm:oV_Darstell:setMarked( {1,nZeichenLaenge} )
(oVostamm:nArea)->(DbSetScope(SCOPE_TOP,Upper(oVostamm:oV_Darstell:editbuffer())))
(oVostamm:nArea)->(DbSetScope(SCOPE_BOTTOM,Trim(Upper(oVostamm:oV_Darstell:editbuffer()))))
ELSE
oVostamm:indexfocus("titel")
nZeichenLaenge := Len(oVostamm:oV_titel:editbuffer()) + 1
oVostamm:oV_titel:setMarked( {1,nZeichenLaenge} )
(oVostamm:nArea)->(DbSetScope(SCOPE_TOP,Upper(oVostamm:oV_titel:editbuffer())))
(oVostamm:nArea)->(DbSetScope(SCOPE_BOTTOM,Trim(Upper(oVostamm:oV_titel:editbuffer()))))
ENDIF
IF (oVostamm:nArea)->(Eof())
oMessage:anzeigen("Es wurden keine Einträge gefunden zum Suchbegriff")
lErfolg := .F.
ENDIF
IF lErfolg
oThread := Thread():new()
oThread:start("gedrueckt",oThread)
DO WHILE ! (oVostamm:nArea)->(Eof()) .OR. lAbbruch
(oVo:nArea)->(DbClearScope())
(oVo:nArea)->(DbSetScope(SCOPE_BOTH,Str((oVostamm:nArea)->id,8,0)))
IF ! (oVo:nArea)->(Eof()) .AND. (oVo:nArea)->preissoll > 0 .AND. ! (oVo:nArea)->reserve
(oKdInfotemp:nArea)->(DbAppend())
(oKdInfotemp:nArea)->v_darstell := (oVostamm:nArea)->v_darstell
(oKdInfotemp:nArea)->v_titel := (oVostamm:nArea)->v_titel
(oKdInfotemp:nArea)->vkpreis := (oVo:nArea)->preissoll
(oKdInfotemp:nArea)->genre := (oGenre:nArea)->bez
(oKdInfotemp:nArea)->lagernr := (oVo:nArea)->lagernr
(oKdinfoTemp:nArea)->(DbGoTop())
oBrowse:refreshAll()
ENDIF
(oVostamm:nArea)->(DbSkip())
ENDD
ENDIF
(oVostamm:nArea)->(DbClearScope())
RETURN(.T.)
********************************************************************************
FUNCTION gedrueckt(oThread)
LOCAL nEvent := 0
LOCAL mp1 := 0
LOCAL mp2 := 0
LOCAL oDialog := XbpDialog():new(,,{500,500},{300,300})
LOCAL oPb
LOCAL oXbp := NIL
MEMVAR lAbbruch
oDialog:create()
oPb := XbpPushButton():new(oDialog,,{10,10},{200,30})
oPb:activate := {|| lAbbruch := .T.,oThread:quit()}
oPb:caption := "Abbruch"
oPb:create()
DO WHILE ! lAbbruch
nEvent := AppEvent( @mp1, @mp2, @oXbp)
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN(.T.)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
Hallo Manfred,
funktioniert das denn so?
Viele Grüße,
Martin
funktioniert das denn so?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
nee, überhaupt nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
Ja, wohl dem der die Augen auf hat.
so läuft das Grundkonzept
so läuft das Grundkonzept
Code: Alles auswählen
********************************************************************************
FUNCTION suchen(oBrowse,cWoher)
LOCAL lErfolg := .T.
LOCAL nZeichenLaenge
LOCAL oThread
MEMVAR lAbbruch
MEMVAR oGenre
MEMVAR oKdinfotemp
MEMVAR oMessage
MEMVAR oSysteme
MEMVAR oVo
MEMVAR oVostamm
lAbbruch := .F.
IF Empty(oVostamm:oV_Darstell:editbuffer()) .AND. Empty(oVostamm:oV_titel:editbuffer())
RETURN(.F.)
ENDIF
SetAppFocus(oBrowse)
oKdInfoTemp:schliesse_datenbank()
oKdinfotemp:db_oeffnen(,,.T.) // immer vorher leer machen
IF Upper(cWoher) == "V_DARSTELL"
oVostamm:indexfocus("darst")
nZeichenLaenge := Len(oVostamm:oV_Darstell:editbuffer()) + 1
oVostamm:oV_Darstell:setMarked( {1,nZeichenLaenge} )
(oVostamm:nArea)->(DbSetScope(SCOPE_TOP,Upper(oVostamm:oV_Darstell:editbuffer())))
(oVostamm:nArea)->(DbSetScope(SCOPE_BOTTOM,Trim(Upper(oVostamm:oV_Darstell:editbuffer()))))
ELSE
oVostamm:indexfocus("titel")
nZeichenLaenge := Len(oVostamm:oV_titel:editbuffer()) + 1
oVostamm:oV_titel:setMarked( {1,nZeichenLaenge} )
(oVostamm:nArea)->(DbSetScope(SCOPE_TOP,Upper(oVostamm:oV_titel:editbuffer())))
(oVostamm:nArea)->(DbSetScope(SCOPE_BOTTOM,Trim(Upper(oVostamm:oV_titel:editbuffer()))))
ENDIF
IF (oVostamm:nArea)->(Eof())
oMessage:anzeigen("Es wurden keine Einträge gefunden zum Suchbegriff")
lErfolg := .F.
ENDIF
IF lErfolg
oThread := Thread():new()
oThread:start("gedrueckt",oThread)
DO WHILE ! (oVostamm:nArea)->(Eof()) .AND. ! lAbbruch
(oVo:nArea)->(DbClearScope())
(oVo:nArea)->(DbSetScope(SCOPE_BOTH,Str((oVostamm:nArea)->id,8,0)))
IF ! (oVo:nArea)->(Eof()) .AND. (oVo:nArea)->preissoll > 0 .AND. ! (oVo:nArea)->reserve
(oKdInfotemp:nArea)->(DbAppend())
(oKdInfotemp:nArea)->v_darstell := (oVostamm:nArea)->v_darstell
(oKdInfotemp:nArea)->v_titel := (oVostamm:nArea)->v_titel
(oKdInfotemp:nArea)->vkpreis := (oVo:nArea)->preissoll
(oKdInfotemp:nArea)->genre := (oGenre:nArea)->bez
(oKdInfotemp:nArea)->lagernr := (oVo:nArea)->lagernr
(oKdinfoTemp:nArea)->(DbGoTop())
oBrowse:refreshAll()
ENDIF
(oVostamm:nArea)->(DbSkip())
ENDD
ENDIF
(oVostamm:nArea)->(DbClearScope())
RETURN(.T.)
********************************************************************************
FUNCTION gedrueckt(oThread)
LOCAL nEvent := 0
LOCAL mp1 := 0
LOCAL mp2 := 0
LOCAL oDialog := XbpDialog():new(,,{500,500},{300,300})
LOCAL oPb
LOCAL oXbp := NIL
MEMVAR lAbbruch
oDialog:create()
oPb := XbpPushButton():new(oDialog,,{10,10},{200,30})
oPb:activate := {|| lAbbruch := .T.}
oPb:caption := "Abbruch"
oPb:create()
DO WHILE ! lAbbruch
nEvent := AppEvent( @mp1, @mp2, @oXbp)
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
oDialog:destroy()
oThread:quit()
RETURN(.T.)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
stellt sich mir jetzt nur die Frage, wie kriege ich den Thread gekillt, wenn die Schleife durch ist, aber kein Abbruch gedrückt wurde. Das muß ja auch irgendwie möglich sein. Den Thread mit :quit() darf ich nicht, dann meckert das System
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Do While Schleife über Pushbutton abbrechen
wenn ein Thread "zu Ende" ist dann ist er es auch. Ein :quit oder so wird nicht gebraucht.Manfred hat geschrieben:stellt sich mir jetzt nur die Frage, wie kriege ich den Thread gekillt, wenn die Schleife durch ist, aber kein Abbruch gedrückt wurde. Das muß ja auch irgendwie möglich sein. Den Thread mit :quit() darf ich nicht, dann meckert das System
gruss by OHR
Jimmy
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
Hi,
das war anders gemeint.
Der Thread zeigt einen Button, mit dem abgebrochen werden kann. Wenn der aber nicht benutzt wurde, sondern die Suche beendet ist, dann läuft der Thread doch noch. Dann muß er ja von außen beendet werden. Sonst steht der Button bis Anno Zwieback am Bildschirm
das war anders gemeint.
Der Thread zeigt einen Button, mit dem abgebrochen werden kann. Wenn der aber nicht benutzt wurde, sondern die Suche beendet ist, dann läuft der Thread doch noch. Dann muß er ja von außen beendet werden. Sonst steht der Button bis Anno Zwieback am Bildschirm
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
Hallo Manfred,
Du musst aus Deiner Funktion gedrueckt eine Klasse (von Thread()) machen - und dann das ganze von außen starten und stoppen...
Anbei mal ein Beispiel für einen animierten Cursor:
Aufrufen von aussen tust Du ihn:
Viele Grüße,
Martin
Du musst aus Deiner Funktion gedrueckt eine Klasse (von Thread()) machen - und dann das ganze von außen starten und stoppen...
Anbei mal ein Beispiel für einen animierten Cursor:
Code: Alles auswählen
CLASS RunDog FROM Thread
PROTECTED:
VAR terminated
VAR aniAct
EXPORTED:
VAR workCounter
INLINE METHOD init
::Thread:init()
::terminated := .F.
::aniAct := 1010
RETURN self
INLINE METHOD stop
RETURN ( ::terminated := .T. )
METHOD execute, checkTermination
ENDCLASS
// Diese Methode wird im Thread ausgeführt
METHOD RunDog:execute
do while .not. ::terminated
oApp:setPointer(,::aniAct,XBPWINDOW_POINTERTYPE_ICON)
::aniAct += 10
if ::aniAct > 1060
::aniAct := 1010
endif
sleep( 15 )
::checkTermination()
enddo
RETURN self
// Diese Methode prüft ob der Thread abgebrochen werden muß
// und terminiert ihn gegebenenfalls
METHOD RunDog:checkTermination
IF ::terminated
::terminated := .F.
oApp:setPointer( , 0, XBPWINDOW_POINTERTYPE_SYSPOINTER )
::quit()
ENDIF
RETURN self
Code: Alles auswählen
oRunDog := RunDog():New()
oRunDog:start()
...
oRunDog:stop()
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
ah,
Beispiel 2. Ok, werde ich mal versuchen
Beispiel 2. Ok, werde ich mal versuchen
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Do While Schleife über Pushbutton abbrechen
ich habe mir jetzt mal deinen Source angesehen und verstehe was du meinstManfred hat geschrieben:das war anders gemeint.
Code: Alles auswählen
oThread := Thread():new()
oThread:start("gedrueckt",oThread)
DO WHILE ! (oVostamm:nArea)->(Eof()) .AND. ! lAbbruch
du hast ja z.b. lAbbruch und das in 2 Function, also müsstet du es dem Thread mit als Parameter
per Reference übergeben um für lAbbruch einen Wert zu bekommen.
Code: Alles auswählen
oThread:start("gedrueckt",@lAbbruch)
FUNCTION gedrueckt() hat ja nun eine DO WHILE Loop. Bei einer Fieldwide Static wäre es ja kein
Problem die auf .F. zu setzten und er verlässt die Schleife.
aber was wäre wenn die beiden Function nicht im selben PRG sind ?
NEIN PRIVATE / PUBLIC gibt hier nicht als Lösung !!!
also was in der Function gedrueckt() fehlt ist ein
Code: Alles auswählen
oDialog:close :={|| PostAppEvent(xbeP_Activate,,,oPB)}
an dieser Stelle wäre nun der "nächst" Schritt fällig : mache eine Class daraus.
lAbbruch wäre dann o:lAbbruch und du könntes es von "überall" ansprechen.
man kann ja z.b. bei Objecten ein PostAppEvent() verwenden, also sowas wie
PostAppEvent(xbeP_Keyboard,.F.,,oMyObject) oder mit Userdef
Code: Alles auswählen
#define xbeE_Abbruch xbeP_User + 1234
PostAppEvent(xbeE_Abbruch,,,oMyObject)
daraus dann hast du "solche" Problem in Zukunft nicht mehr.
gruss by OHR
Jimmy
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
so, ich habe mal versucht die Sache mit der Threadklasse einzubauen. Aber....
der wird nicht fremd beendet. Das kapiere ich irgendwie nicht, wie das klappen soll. Ich habe das Beispiel aus dem Handbuch übernommen und etwas modifiziert.
Die Abbruch Sache klappt über den Pushbutton
Code: Alles auswählen
IF lErfolg
oThread := gedrueckt():new()
oThread:start()
DO WHILE ! (oVostamm:nArea)->(Eof()) .AND. ! lAbbruch
(oVo:nArea)->(DbClearScope())
(oVo:nArea)->(DbSetScope(SCOPE_BOTH,Str((oVostamm:nArea)->id,8,0)))
IF ! (oVo:nArea)->(Eof()) .AND. (oVo:nArea)->preissoll > 0 .AND. ! (oVo:nArea)->reserve
(oKdInfotemp:nArea)->(DbAppend())
(oKdInfotemp:nArea)->v_darstell := (oVostamm:nArea)->v_darstell
(oKdInfotemp:nArea)->v_titel := (oVostamm:nArea)->v_titel
(oKdInfotemp:nArea)->vkpreis := (oVo:nArea)->preissoll
(oKdInfotemp:nArea)->genre := (oGenre:nArea)->bez
(oKdInfotemp:nArea)->lagernr := (oVo:nArea)->lagernr
(oKdinfoTemp:nArea)->(DbGoTop())
oBrowse:refreshAll()
ENDIF
(oVostamm:nArea)->(DbSkip())
ENDDO
IF lAbbruch
oMessage:anzeigen("Die Suche wurde abgebrochen")
ENDIF
oThread:terminate()
ENDIF
SetAppFocus(oBrowse)
(oVostamm:nArea)->(DbClearScope())
RETURN(.T.)
********************************************************************************
CLASS gedrueckt FROM THREAD
PROTECTED:
VAR terminated
EXPORTED:
INLINE METHOD init
::thread:init()
::terminated := .F.
RETURN self
INLINE METHOD terminate
RETURN ( ::terminated := .T. )
METHOD checkTermination
METHOD execute
ENDCLASS
********************************************************************************
METHOD gedrueckt:execute()
LOCAL nEvent := 0
LOCAL mp1 := 0
LOCAL mp2 := 0
LOCAL oDialog := XbpDialog():new(,,,{150,120})
LOCAL oPb
LOCAL oXbp := NIL
MEMVAR lAbbruch
oDialog:create()
CenterControl(oDialog)
oPb := XbpPushButton():new(oDialog,,,{80,30})
oPb:activate := {|| lAbbruch := .T.}
oPb:caption := "Abbruch"
oPb:create()
CenterControl(oPb)
DO WHILE ! lAbbruch
nEvent := AppEvent( @mp1, @mp2, @oXbp)
oXbp:handleEvent( nEvent, mp1, mp2 )
::checkTermination()
ENDDO
oDialog:destroy()
RETURN self
********************************************************************************
METHOD gedrueckt:checkTermination()
IF ::terminated
::terminated := .F.
::quit()
ENDIF
RETURN self
********************************************************************************
Die Abbruch Sache klappt über den Pushbutton
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
Hmmm - zwei Ideen:
Zum einen hast Du keinen Timeout in Deiner Schleife in dem Thread (ich meine bei AppEvent(...) ) und zum anderen hast Du lAbbruch als Schleifenbedingung genommen - da sollte aber .not. ::terminated rein...
Viele Grüße,
Martin
Zum einen hast Du keinen Timeout in Deiner Schleife in dem Thread (ich meine bei AppEvent(...) ) und zum anderen hast Du lAbbruch als Schleifenbedingung genommen - da sollte aber .not. ::terminated rein...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
ok,
das mit dem lAbbruch habe ich verstanden, habe ich übersehen. Aber das mit dem Timeout, das verstehe ich noch nicht, der soll doch theoretisch endlos laufen. Wird also entweder nur durch fertig (durch Schleife), oder abbruch (durch User) beendet.
das mit dem lAbbruch habe ich verstanden, habe ich übersehen. Aber das mit dem Timeout, das verstehe ich noch nicht, der soll doch theoretisch endlos laufen. Wird also entweder nur durch fertig (durch Schleife), oder abbruch (durch User) beendet.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
Äh, Manfred - ich meinte den vierten Parameter bei AppEvent()...
Viele Grüße,
Martin
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
prima, Danke, das war es.
So scheint es jetzt zu klappen. Das ist also das Prinzip für mehr oder weniger alle Threads, die man bauen möchte, oder muß? Eigentlich auf den 1.Blick recht einfach. (Wenn man weiß, wie es geht)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
Martin,
das hatte ich schon probiert. So wie ich es verstanden habe, wird eine Zahl angegeben?
Dann kommt die Fehlermeldung:
Base/2266
Empfänger der Nachricht ist kein Objekt
das hatte ich schon probiert. So wie ich es verstanden habe, wird eine Zahl angegeben?
Dann kommt die Fehlermeldung:
Base/2266
Empfänger der Nachricht ist kein Objekt
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
?? Wo kommt die Meldung wann??
Viele Grüße,
Martin
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21199
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Do While Schleife über Pushbutton abbrechen
sobald der Thread angestossen wird und die Eventschleife loslegt
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Do While Schleife über Pushbutton abbrechen
Genauer!
WIe lautet die Zeile (bzw. was steht in der betreffenden Zeile)?
Viele Grüße,
Martin
WIe lautet die Zeile (bzw. was steht in der betreffenden Zeile)?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.