Autor Beitrag
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 10.07.03 19:48 
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


Zuletzt bearbeitet von Klabautermann am Di 15.07.03 22:38, insgesamt 1-mal bearbeitet
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

_________________
Ist Zeit wirklich Geld?
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
while (not Terminated) then
begin
  if PeekMessage(Msg, 000, PM_REMOVE) <> 0 then
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end
  else
    Sleep(0); // keine Message -> CPU Zeit freigeben
end;

_________________
Ist Zeit wirklich Geld?
Klabautermann Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 11.07.03 13:37 
Klasse,

herzlichen Dank.

Klabautermann
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert