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.