wenn ich mit Multithreading arbeite, mache ich das meist nach folgendem Schema:
Code: Alles auswählen
type TMyForm: class(TForm)
// ...
MyTestThread: TTestThread;
end;
procedure TMyForm.Button1Click(Sender:TObject);
begin
if not Assigned(MyTestThread) then begin
MyTestThread := TTestThread.Create(True);
MyTestThread.FreeOnTerminate := False;
MyTestThread.OnTerminate := @TestThreadTerminate;
// ...
MyTestThread.Start;
end;
end;
procedure TMyForm.Button2Click(Sender:TObject);
begin
if Assigned(MyTestThread) then
MyTestThread.Terminate;
end;
procedure TMyForm.TestThreadTerminate(Sender: TObject);
begin
if (Assigned(MyTestThread.FatalException) and (MyTestThread.FatalException is Exception)) then
// ...
FreeAndNil(MyTestThread);
end;
procedure TMyForm.FormDestroy(Sender: TObject);
begin
// ...
if Assigned(MyTestThread) then
begin
MyTestThread.Terminate;
while Assigned(MyTestThread) do
Application.ProcessMessages;
end;
//...
end;
Meine Frage ist: Kann ich Application.ProcessMessages zu Verarbeiten der Messages (und damit meins Verstaendnisses nach auch der OnTerminate-Message) auch in einer Konsolenanwendung, einem Systemservice oder aus deinem Thread heraus, der nicht der Main Thread ist, verwenden? Wenn nein, welche Alternativen habe ich?
Danke!