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