![]() |
SuspendThread - Thread Ausführung unterbrechen
Hallo,
ich brauche drigend euere Hilfe ;-). 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:
Delphi-Quellcode:
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. |
Re: SuspendThread - Thread Ausführung unterbrechen
Die Benachrichtigung kann in beide Richtungen über Events erfolgen.
Ich stelle mir das im Prinzip so vor:
Code:
SubThread:
SetEvent(ExitEvent) WaitForSingleObject( ... ResumeEvent ...) ResetEvent(ResumeEvent) MasterThread: MsgWaitForMultipleObjects( ... ExitEvent ... ) ResetEvent(ExitEvent) SetEvent(ResumeEvent) |
Re: SuspendThread - Thread Ausführung unterbrechen
Zitat:
Schon lustig, genau so habe ich es mittlerweile gelöst ;-) Trotzdem danke für deine Antwort. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz