Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
Ereignisorientierte Threads/Message Handling
spacer
Autor Nachricht
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 2541
Erhaltene Danke: 12
Dabei seit: 16.02.2005



BeitragVerfasst: Fr 20.02.09 23:13  Antworten mit Zitat Beitrag melden
Ereignisorientierte Threads/Message Handling
Threads werden normalerweise nicht ereignisorientiert betrieben. Das heisst, man leitet von TThread ab und schreibt sequentiellen Code in die abgeleitete Execute-Methode. Folgende Low-Level-Klasse TMessageThread stellt eine Alternative zu TThread dar: Statt der Execute-Methode müssen hier message-Methoden geschrieben werden. Entweder in einer abgeleiteten Klasse von TMessageThread oder in einer fremden Klasse (in diesem Fall entfällt das Ableiten). Die Message-Methoden können dann über PostMessage im Kontext des Threads ausgelöst werden. Wenn keine Messages verschickt werden schläft der Thread.

Anwendungsbereich: z.B. als Basis für die Realisierung eines Worker-Threads, der getrennt von der GUI arbeitet und Instruktionen vom GUI-Mainthread erhält.

Anwendungsbeispiel (Beispiel mit SendMessage zur Veranschaulichung):
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
{$APPTYPE CONSOLE}

uses Windows, Messages, SysUtils, MessageThread;

const
UM_GETID = WM_USER + 1;

type
TMyThread = class(TMessageThread)
protected
procedure UMGetID(var Message: TMessage); message UM_GETID;
end;

procedure TMyThread.UMGetID(var Message: TMessage);
begin
Message.Result := GetCurrentThreadId;
end;

var
Thread: TMyThread;
begin
Thread := TMyThread.Create;
try
Writeln('MainThreadID: '+IntToStr(GetCurrentThreadId));
Writeln('ThreadID: '+IntToStr(SendMessage(Thread.Handle, UM_GETID, 0, 0)));
finally
Thread.Free;
end;
readln;
end.

Natürlich hätte man das Messaging alleine auch ohne Windows-Messages realisieren können. Hier geht es jedoch um eine Implementation einer minimalen Windows-Message-Schleife in einem Thread. So kann bspw. relativ einfach ein Windows-Timer im Thread betrieben werden.


MessageThread.pas  (4.37 KB) Download (Rev 0)
 (69x, 69x gesamt)
Beschreibung: MessageThread.pas
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home