oThread:synchronize(0)

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

Moderator: Moderatoren

Antworten
henxl
UDF-Programmierer
UDF-Programmierer
Beiträge: 91
Registriert: Fr, 10. Feb 2006 19:46
Wohnort: Mannheim

oThread:synchronize(0)

Beitrag von henxl »

Hallo,

ich verwende im Programm mehrereThread wie folgt:

Code: Alles auswählen


    ... Main()
    ...
    oThread1:=Thread():new()
    oThread1:start( "Funktion1", Para1, Para2, ...  )
    oThread1:synchronize(0)
    lRet := oThread1:result
   ...

   Function Funktion1( Para1, Para2, ... )
   ...
   oThread2:=Thread():new()
   oThread2:start( "Funktion2", Para1, Para2, ...  )
   oThread2:synchronize(0)
   lRet := oThread2:result
   ...


   Function Funktion2( Para1, Para2, ... )
   ...
   oThread3:=Thread():new()
   oThread3:start( "Funktion3", Para1, Para2, ...  )
   oThread3:synchronize(0)
   lRet := oThread3:result
   ...


   Function Funktion3( Para1, Para2, ... )
   ...
    Tu was ...
   ...


Gelegentlich stürzt das Programm ab mit Fehler "Error Codes: EH: 4 Sub: 6(6) OS: 6 XPP: 40 "in der XbpFatal.log, Beispiel:
Die Programmzeile "CL_EH(208)" enthält "oThread:synchronize(0)".
Die Abstürze sind nicht reproduzierbar, treten jedoch immer wieder an den gleichen Stellen (aber nicht nur dort) auf.

FATAL ERROR LOG
System-Error
SYS Thread-ID: 1752
Module: EVM
Error Codes: EH: 4 Sub: 6(6) OS: 6 XPP: 40
Call Stack of Thread 1 (388):
CL_EH(208)
(B)ERRORSYS@0000(55)
@CL_PBAR@I@DESTROY(822)
@CL_PBWIN@I@DESTROY(595)
CL_PWIN(181)
CL_PHINW(420)
DB_TXT(203)
DB_QUIT(110)
CL_APPQUIT(1849)
APPQUIT(4586)
GB_MENUSELECT(1364)
(B)GB_MENUCREATE@0000(27)
GB_START(275)
GB_MAIN(131)
MAIN(70)
Call Stack of Thread 2 (596):
Call Stack of Thread 3 (1752):
Call Stack of Thread 4 (1180):
File: C:\GbRM\GB.EXE
TimeStamp: 20090224 12:29
End of FATAL ERROR LOG.

Meine Frage: Ist es zulässig, beim Verschachteln der Threads in der oben dargestellten Weise wiederholt "oThread:synchronize(0)" zu benutzen ?
Meine Absicht ist, dass der laufende Thread auf das Ende des neu gestarteten Threads wartet.

Das Programm ist in reinem xBase (1.9) geschrieben, keine Tools bzw. Zusatzprogramme.
Ich benutze PC mit WinXP Prof. und Vista, bei beiden stürzt das Programm gelegentlich ab.


Grüße
Heinz
Das einzige, was ich weiß ist, dass ich nichts weiß, Sokrates
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12913
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: oThread:synchronize(0)

Beitrag von AUGE_OHR »

henxl hat geschrieben:

Code: Alles auswählen

    ... Main()
    ...
    oThread1:=Thread():new()
    oThread1:start( "Funktion1", Para1, Para2, ...  )
    oThread1:synchronize(0)
damit "warte"* der Thread1 auf Thread1 ??? (* ist nicht ganz richtig ausgedrückt...)
henxl hat geschrieben: Meine Absicht ist, dass der laufende Thread auf das Ende des neu gestarteten Threads wartet.
also wenn es 2 Threads wären ...
Hinweis: Wenn der aktuelle Thread auf die Beendigung eines zweiten Threads warten muß, gibt es zwei Möglichkeiten:

Code: Alles auswählen

    DO WHILE .NOT. oThreadB:synchronize(1) 
       <Programm Code> 
    ENDDO 
 
/* oder */ 
 
    oThreadB:synchronize(0) 
ThreadA soll warten bis ThreadB fertig ist, richtig ?
gruss by OHR
Jimmy
henxl
UDF-Programmierer
UDF-Programmierer
Beiträge: 91
Registriert: Fr, 10. Feb 2006 19:46
Wohnort: Mannheim

Re: oThread:synchronize(0)

Beitrag von henxl »

Hi Jimmy,

mit meinem Beispiel wollte ich darstellen, dass ich nach dem Programmstart (ThreadA) einen weiteren Thread (oThread1) starte und oThread1:synchronize(0) bedeutet, dass ThreadA warten muss, bis Thread1 beendet wird.
Aus Thread1 starte ich dann erneut einen Thread (oThread2). Nun soll Thread1 warten (oThread2:synchronize(0) ), bis Thread2 beendet wird.
Wird Thread2 dann beendet, nimmt Thread1 die Arbeit wieder auf. Wird Thread1 dann beendet, arbeitet ThreadA weiter.

Kann ich das mit wiederholtem :synchronize(0) realisieren ?

Grüße
Heinz
Das einzige, was ich weiß ist, dass ich nichts weiß, Sokrates
Antworten