Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Threads & Komponenten [gelöst]
Klabautermann - Do 10.07.03 19:48
Titel: Threads & Komponenten [gelöst]
Hallo,
ich habe Threads bisher nur für Berechnungen, die "im Hintergrund" laufen sollten genutzt. Jetzt stellt sich für mich aber die Frage, ist es möglich, dass ein Thread sich seine Eigene (unsichtbare) Komponente erstellt, und arbeitet diese dann in der Prozessorzeit des Threads?
So könnte der Thread sich z.B. um die Netzwerkkommunikation kümmern, wenn die Netzwerkkomponente ihm alleine gehört, und dabei sogar gleichzeitig verbindungen mit verschiedenen Servern aufnehmen (wenn man mehrere solcher Threads erzeugt).
Also ist dies möglich, und wenn ja worauf muss ich achten? Kann man vieleicht sogar ein DM in einem eigenen Thread laufen lassen (was der absolute Luxus in diesem Fall währe)?
Neugierig,
Klabautermann
AndyB - Do 10.07.03 22:39
Du kannst in einem Thread all das machen, was du auch im Hauptthread machen kannst. Du musst dem Thread aber für Komponenten, die mit Botschaften arbeiten, eine Message-Loop zur Verfügung stellen.
Das beste Beispiel sind hierfür die Indy-Server-Komponenten wie IdTCPServer.
Klabautermann - Fr 11.07.03 12:07
Hallo,
| AndyB hat folgendes geschrieben: |
| Du kannst in einem Thread all das machen, was du auch im Hauptthread machen kannst. |
Das ist ja schon mal sehr vielversprechend.
| AndyB hat folgendes geschrieben: |
| Du musst dem Thread aber für Komponenten, die mit Botschaften arbeiten, eine Message-Loop zur Verfügung stellen. |
Ich muss also eine Message Loop Nachbauen? Die dann bis zur Terminierung des Threads läuft?
| AndyB hat folgendes geschrieben: |
| Das beste Beispiel sind hierfür die Indy-Server-Komponenten wie IdTCPServer. |
Da habe ich eben nur kurz reingeguckt, dass ist zu viel um es jetzt auf die schnelle zu erfassen (und da es um ein Privat Projekt geht kann ich nicht zu viel Arbeitszeit drauf verwenden ;)). ICh werde es mir dann bei gelegenheit mal genauer anschauen. Hast du einen Tipp (schlüsselwort oder so) wodrauf ich achten soll (um die interessanten stellen schneller zu finden)?
Auf jeden Fall Danke für die Tipps, dass wird mir sicherlich schon mal ein Stück weiter helfen.
Gruß
Klabautermann
AndyB - Fr 11.07.03 13:14
Das DataModule dürfte kein Problem bereiten, da es nichts anderes als nicht visuelle Komponente mit mehreren Unterkomponenten ist.
Folgendes müsste für die MessageLoop ausreichend sein.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| while (not Terminated) then begin if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) <> 0 then begin TranslateMessage(Msg); DispatchMessage(Msg); end else Sleep(0); end; |
Klabautermann - Fr 11.07.03 13:37
Klasse,
herzlichen Dank.
Klabautermann
tommie-lie - Do 24.07.03 14:54
Ohh, ähh, kleiner Nachtrag:
Wieso muss in die MessageLoop ein TranslateMessage und ein DispatchMessage?
Ersteres braucht man nur, wenn man irgendwie auf Tasten-Nachrichten (WM_KEYDOWN oder sowas) wirklich reagieren will und zweiteres nur, wenn man ein Fenster hat, an den die Nachrichten geschickt wurden, dann wird nämlich die WndProc mit der Nachricht als Parameter aufgerufen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!