AGB  ·  Datenschutz  ·  Impressum  







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

konsole anwendung und timer...

Ein Thema von agm65 · begonnen am 15. Feb 2006 · letzter Beitrag vom 15. Feb 2006
 
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: konsole anwendung und timer...

  Alt 15. Feb 2006, 20:51
Ich fange mal so an:
Zitat von http://support.microsoft.com/:
http://support.microsoft.com/kb/q102482/

INFO: SetTimer() sollte in Konsole-Anwendungen nicht verwandt werden
...

Zusammenfassung

SetTimer() war für die Verwendung mit einer Konsole-Anwendung nicht vorgesehen, da es erfordert, eine Meldungsschleife das Timer-Signal an der Timer-Prozedur weiterzuleiten. Dieses Verhalten kann problemlos mit einem Threads, das festgelegt wird, auf auf einem Ereignis warten, in einer Konsole-Anwendung emuliert werden.
Weitere Informationen
SetTimer() kann In Windows NT 3.1 in einer Konsole-Anwendung arbeiten aber es erfordert ein Thread in einer Schleife, die GetMessage() und DispatchMessage() aufruft.
Mann kann das mal mit diesem Konsolenprogramm versuchen: ( Die Org. C-Version: http://simplesamples.info/Windows/ConsoleTimer.php )
Delphi-Quellcode:
program Timertest;

{$APPTYPE CONSOLE}

uses
  Windows, Messages;

procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD);
begin
  Writeln('Time: ', dwTime);
end;

var
  Counter: Integer = 0;
  Msg: TMsg;
  TimerID: Cardinal;

BEGIN
  TimerId := SetTimer(0, 10, 500, @TimerProc); // Timer setzen
  if TimerId = 0 then
  begin
    Writeln('Timer konnte nicht initialisiert werden.');
    halt;
  end;

  while GetMessage(Msg, 0, 0, 0) do
  begin
    inc(Counter);
    if Msg.message = WM_TIMER then
    begin
      writeln('Counter: ', Counter, ', timer message');
    end else
    begin
      writeln('Counter: ', Counter, ', Message: ', Msg.message);

      DispatchMessage(Msg);
    end;
  end;

  beep(880,25);
  KillTimer(10, TimerId); // Timer löschen
END.
Besser und einfacher ist es wie beschrieben mit einem Thread zu arbeiten.

Delphi-Quellcode:
program Threadtest;

{$APPTYPE CONSOLE}

uses
  Windows;

var
  hConsoleInput,
  hConsoleOutput: THandle;
  Msg: TMsg;
  ThreadID: Cardinal;
  ProgramEnd: Boolean;

function KeyPressed: Boolean;
var
  NumberOfEvents: DWORD;
  NumRead: DWORD;
  InputRec: TInputRecord;
begin
  Result := False;
  GetNumberOfConsoleInputEvents(hConsoleInput, NumberOfEvents);
  if NumberOfEvents > 0 then
    if PeekConsoleInput(hConsoleInput, InputRec, 1,NumRead) then
    begin
      if (InputRec.EventType = KEY_EVENT) and
        (InputRec.Event.KeyEvent.bKeyDown) then Result := True
        else ReadConsoleInput(hConsoleInput, InputRec, 1, NumRead);
    end;
end;

function MyThreadFunc(Parameter: Pointer): Integer;
begin
  Result := 0;

  repeat
    Beep(440, 50);
    SetConsoleTextAttribute(hConsoleOutput, 1+Random(15));
    Sleep(500);
  until ProgramEnd;

  EndThread(0);
end;

BEGIN
  hConsoleOutput := GetStdHandle(STD_OUTPUT_HANDLE);
  hConsoleInput := GetStdHandle(STD_INPUT_HANDLE);
  SetConsoleTitle('Taste druecken um Programm zu beenden.');

  BeginThread(nil, 0, MyThreadFunc, nil, 0, ThreadID);

  while not ProgramEnd do
  begin
    TranslateMessage(msg);
    DispatchMessage(msg);

    Write(Random(2));

    if KeyPressed then ProgramEnd := True;
  end;

END.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  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 22:51 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