Einzelnen Beitrag anzeigen

Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Sleep in einem Thread. Application.processmessage

  Alt 17. Okt 2008, 11:56
Wenn du immer wiederkehrende Aufgaben hast, solltest du diese in einen Timer auslagern. Es ist nämlich überhaupt nicht gesichert, dass GetMessage in annehmbarer Zeit zurückkehrt. Der Code sähe dann in etwa so aus:
Delphi-Quellcode:
procedure TThreadClient.OnTimer;
begin
  if fClient.Active then
  begin
    //... sende daten
  end;
  //Noch Online?
  if not fClient.Active then begin
    //... baue verbindung auf
  end;
end;

procedure TThreadClient.Execute;
var Msg: TMsg;
begin
  fTimer := TTimer.Create(nil);
  try
    fTimer.Interval := Wuppdi;
    fTimer.OnTimer := Self.OnTimer;
    fTimer.Enabled := True;

    while GetMessage(Msg, 0, 0, 0) do
      DispatchMessage(Msg);
  finally
    fTimer.Free;
  end;
end;


procedure TThreadClient.DoTerminate;
begin
  PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
end;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat