Einzelnen Beitrag anzeigen

RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#6

AW: In Konsolenanw. auf Firebird-Events reagieren?

  Alt 5. Dez 2012, 14:49
ReadConsole hat tatsächlich gewartet, bis eine Eingabe erfolgt, bevor es zurückkehrt. Damit hat es natürlich den restlichen Programmablauf blockiert...
Die funktionierende Lösung ist die folgende:
Delphi-Quellcode:
procedure ProcessMessages;
var
  SIN: Cardinal;
  Num: Cardinal;
  IR: TInputRecord;
begin
  SIN := GetStdHandle(STD_INPUT_HANDLE);
  repeat
    if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
      DispatchMessage(Msg)
    else
    begin
      while PeekConsoleInput(SIN, IR, 1, Num) and (Num > 0) do
        if (IR.EventType = KEY_EVENT) and (IR.Event.KeyEvent.bKeyDown) then
          Exit
        else
          FlushConsoleInputBuffer(SIN); // sonst wird immer wieder der gleiche Puffer getestet und nie geleert;
      Sleep(0); // Rest der Zeitscheibe verwerfen
    end;
  until False;
end;
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat