SuspendThread - Thread Ausführung unterbrechen
-
Hallo,
ich weiß, dass es Delphi-Code ist, aber ich brauche drigend euere Hilfe ;-). Bei Verwendung von WinAPI-Routinen spielt das eh kaum eine Rolle.
Ich habe einen Thread der mehrfach gestartet werden muss. Da das eigentliche Programme zu viel Komplexität hat, habe ich das Problem auf ein ganz einfaches Beispiel heruntergebrochen:
program RTT; {$APPTYPE CONSOLE} uses Windows, sysutils; type TParam = record PHandle : ^THandle; PInt : ^Integer; end; var Int : Integer = 0; hThread : THandle; ExitEvent : THandle; dwThreadID : DWORD; Param : TParam; msg : tagMSG; dwStatus : DWORD; bCanceled : Boolean = false; function ThreadFunc(lpParams: Pointer): Integer; stdcall; var PParam : ^TParam absolute lpParams; begin while not bCanceled do begin Inc(PParam^.PInt^); SetEvent(ExitEvent); SuspendThread(PParam^.PHandle^); writeln('test'); end; writeln('Thread will be terminated'); ExitThread(0); end; begin ExitEvent := CreateEvent(nil, true, false, nil); hThread := CreateThread( nil, 0, @ThreadFunc, @Param, CREATE_SUSPENDED, dwThreadID ); Param.PHandle := @hThread; Param.PInt := @Int; while( Int <> 1000 ) do begin ResumeThread(hThread); while(true) do begin while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do DispatchMessage(msg); dwStatus := MsgWaitForMultipleObjects(1, ExitEvent, false, INFINITE, QS_ALLINPUT); if( dwStatus = (WAIT_OBJECT_0 + 1) ) then continue else break; end; writeln(Int); end; bCanceled := true; ResumeThread(hThread); readln; end.Leider funktioniert das nicht wirklich. Mal wird eine Zahl doppelt ausgegeben, mal kommt mehrfach hintereinander "test" ... wie kann man das richtig lösen? SuspendThread ist ja mehr für Debugger.