AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threadlogik Problem

Ein Thema von stOrM · begonnen am 22. Aug 2008 · letzter Beitrag vom 27. Aug 2008
 
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Threadlogik Problem

  Alt 22. Aug 2008, 18:15
Zitat von alias5000:
Warum soll das eine Endlosschleife sein?

Vom Verlauf her sieht das doch so aus:
Code:
1. Thread läuft in einer (abbrechbaren) Endlosschleife und sucht ständig nach so einem Fenster
 -
 -
\/
1. Thread findet ein Fenster, erstellt und startet einen WorkerThread
 -
 -
\/
Der Worker-Thread arbeitet nicht in einer Endlosschleife, sondern sendet eine Nachricht (WM_??) an das Fenster und dann ist die Execute-Methode vorbei
 -
 -
\/
1. Thread bekommt, wenn benötigt, über das OnTerminate Ereignis mit, wenn der WorkerThread fertig ist
Wenn du beim WorkerThread FreeOnTerminate auf True setzt, dann gibt er sich ja selbstständig frei, wenn die Execute-Methode rum ist und er sich somit terminiert.

Ist damit dein Problem geklärt, oder wohin solls genau gehen?

Gruß
alias5000
Also ich habs nu ungefähr so, dass Problem ist, das der WorkerThread nicht beendet, anstelle dessen sendet er ohne ende ne Nachricht an das Fremdfenster, dass soll er aber nur einmal machen, dass Problem ist, wie bekomme ich denn das so hin:

Der 1. Thread muss ja unendlich nach einem Fenster suchen, wenn diese gefunden wird den Workerthread starten, dieser sendet die Nachricht und soll sich beendet wenn die Nachricht versendet wurde, was aber wenn das Fenster Fremdfenster nicht geschlossen wurde? Thread1 startet ja dann wieder Thread2? Genau das ist ja das Problem.

Szenario 2
Thread1 findet das Fenster, Worker wird gestartet sendet die Nachricht und würde beendet werden, Fremdfenster wurde geschlossen.
Fremdfenster wird erneut aufgerufen, also wieder alles von vorne! Das ist mir völlig unklar logiktechnisch...

Ich zeigs mal per Code vielleicht wirds dann deutlicher:

Delphi-Quellcode:
constructor TMozWatchDogThread.Create;
begin
  inherited create(true);
   freeOnTerminate := true;
   Priority := tpLowest;
end;

destructor TMozWatchDogThread.destroy;
begin
  inherited destroy;
end;

procedure TMozWatchDogThread.Execute;
begin
  while not(Terminated = true) do
   begin
      // Suche Fenster wenn handle > 0 dann
      // StarteWorkerThread;
      // hat workerthread nachricht gesendet und ist fremdfenster geschlossen,
      // dann alles von vorne, hat worker nachricht gesendet aber fenster noch offen
      // dann nicht erneut nachricht an fremdfenster senden!
     end;
end;

{ TMozWatchDogWrokerThread }

constructor TMozWatchDogWorkerThread.create;
begin
  inherited create(true);
  freeOnTerminate := true;
  Priority := tpLowest;
end;

destructor TMozWatchDogWorkerThread.destroy;
begin
  inherited destroy;
end;

procedure TMozWatchDogWorkerThread.Execute;
begin
  // sende nachricht an fremdfenster, dann beende dich selber

end;
Gruss
s!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz