AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit PostMessage aus einem Thread

Ein Thema von deadcantdance · begonnen am 6. Feb 2009 · letzter Beitrag vom 7. Feb 2009
 
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Probleme mit PostMessage aus einem Thread

  Alt 6. Feb 2009, 16:39
Application.ProcessMessages darf nicht im Kontext des Threads laufen; da beisst keine Maus einen Faden ab!
Dein Thread sollte auch nicht unbedingt mit höherer Prio laufen.
Wenn dein Thread auf die Benutzeroberfläche zugreifen muss, dann immer mit der Methode Synchronize:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin

  for i := ... to ... do
  begin
    FStatus := 'Lese '+ IntToStr(i);
    Synchronize(UpdateLabel);

    DatenLesen;

    FStatus := 'Verarbeite '+ IntToStr(i);
    Synchronize(UpdateLabel);
    
    Datenverarbeiten;
   
    Synchronize(UpdateGui);

    if Terminated then Exit; // wichtig, um den Thread sauber abbrechen zu können
  end;
end;

procedure TMyThread.UpdateLabel;
begin
  form1.StatusLabel.Caption := FStatus;
  form1.StatusLabel.Refresh;
end;

procedure TMyThread.UpdateGui;
begin
  form1.vsg1.items.Add(....);
  form1.vsg1.refresh;
end;
Der Trick ist nun, dass Synchronize eine Windows Botschaft in die Messagequeue setzt
und die Methode UpdateGui im Kontext der Hauptthreads ausgeführt wird.

Über Synchronize kannst du nur eine Methode ohne Parameter aufrufen.
Diese Einschränkung lässt sich umgehen, indem die Parameter als Variablen im Thread-Objekt gespeichert werden.

Übrigens:
Wenn dein Thread niemals wartet (WaitforMultipleObjects), dann ist es ganz normal, dass die CPU-Auslastung auf 100% geht!
Andreas
  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 05:56 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