Thread / :setStartTime()

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Thread / :setStartTime()

Beitrag von AUGE_OHR »

hi,

ich habe seit einiger Zeit Probleme mit :setStartTime() ... er scheint nicht (mehr) auf die Zeit zu reagieren sondern löst sofort aus ?

Code: Alles auswählen

LOCAL nWait := 10
STATIC oThread4 := NIL

IF oThread4 = NIL
   oThread4 := Thread() :new()
ENDIF
oThread4:setStartTime( SECONDS() + nWait )
oThread4:start( "NEWF2", @lExit )
verwendet sonst jemand Thread / :setStartTime()
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Thread / :setStartTime()

Beitrag von AUGE_OHR »

hi,

hab ein (einfaches) Demo gemacht und da funktioniert es ... aber wenn man noch einen Thread / ActiveX verwendet tritt das Problem auf :angry4:

---

was will ich erreichen :

es soll ein Thread gestartet werden und eine Aktion abbrechen wenn die Zeit abgelaufen ist.

Code: Alles auswählen

   oThread4:setStartTime( SECONDS() + nWait )
   oThread4:start( "NEWF2", @lExit )
die ausführung des Thread soll "storniert" werden wenn die Aktion innerhalb der Zeit erledigt wurde

Code: Alles auswählen

   oThread4:setStartTime( NIL )
   oThread4:setInterval( NIL )
   oThread4 := NIL
wie das erweiterte Demo nun zeigt startet oThread4 obwohl die Zeit nicht abgelaufen ist.
THREAD_Stop1.ZIP
Source, "pure" Xbase++
(518 Bytes) 206-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Thread / :setStartTime()

Beitrag von AUGE_OHR »

ok, hab eine Lösung gefunden. so funktioniert es mit der abgelaufenen Zeit

Code: Alles auswählen

   SLEEP(20)

   // wenn active 
   IF oThread4:active
      // auf Beendigung warten
      oThread4:synchronize( 0 )
   ENDIF

   oThread4:setStartTime( NIL )
   oThread4:setInterval( NIL )

   oThread4 := NIL
offen bleibt die Frage warum lExit nicht funktioniert. ich übergebe es per Referenz

Code: Alles auswählen

PROCEDURE MAIN
LOCAL lExit := .F.
   oThread:start( "Thread4", @lExit )
   DO WHILE .NOT. lExit

PROCEDURE Thread4( lExit )
   oThread4:start( "NEWF2", @lExit )

PROCEDURE NEWF2( lExit )
   lExit := .T.
gruss by OHR
Jimmy
Antworten