Einzelnen Beitrag anzeigen

Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

Delay(sleep) nicht synchron,gegenseitige Blockade

  Alt 20. Mai 2008, 06:22
wenn man dieses Delay Funktion von Hagen verwendet, geht die Synchronität verloren, gibts denn da eine Möglichkeit, das trotzdem zu realisieren?

http://www.delphipraxis.net/internal...elay+revisited


wenn man Button1 drückt, und gleich darauf Button2 ... dann kehrt Button1 erst zurück, NACHDEM Button2 fertig ist, obwohl in Button1 nur 1000 msec Verzögerung angegeben ist, gegenüber 10 Sekunden bei Button2 ....




Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var
  Tick: DWord;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWord(Milliseconds);
    while (Milliseconds > 0) and
          (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      if Application.Terminated then Exit;
      Milliseconds := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;


//==============================================================================

procedure TForm2.Button1Click(Sender: TObject);
begin
   sleepX(1000);
   ShowMessage('Button1');
end;
//==============================================================================


procedure TForm2.Button2Click(Sender: TObject);
begin
   sleepX(10000);
   ShowMessage('Button2');
end;

//==============================================================================
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat