Forum: PC-Programmierung Win32 Konsolenanwendung und Timer


von chrissy (Gast)


Lesenswert?

Kann mir einer auf die Sprünge helfen, wieso bei einer Konsolenanwendung
beim Visual C++ 6 mein Timer nicht das tut, was ich erwartete...

Ich mache einfach mal nur folgendes:

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define  FREQ 1

void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD
dwTime)
{
  _putch('a');
}

int main(void)
{
  UINT uiTimerID;
  uiTimerID = SetTimer(NULL, 0, 1000/FREQ, TimerProc);
  _getch();
  //KillTimer(NULL, uiTimerID);
}

Müsste sich da nicht etwas tun? Oder wo liegt der Fehler?

von Rufus T. Firefly (Gast)


Lesenswert?

Das geht so nicht:

  "An application can process WM_TIMER messages by including a
  WM_TIMER case statement in the window procedure or by specifying
  a TimerProc callback function when creating the timer.

  When you specify a TimerProc callback function, the default
  window procedure calls the callback function when it processes
  WM_TIMER.
  Therefore, you need to dispatch messages in the calling thread,
  even when you use TimerProc instead of processing WM_TIMER."

Deine Konsolapplikation hat kein Fenster, also auch keine "window
procedure" und daher geht das nicht.

Abhilfe:
timeSetEvent verwenden (das ist eine Multimediatimerfunktion)


Für Dein Beispiel

  timeSetEvent(1000, 10, TimerProc, NULL, TIME_PERIODIC);

  // Timerauflösung 10 msec ist Windows-Default

Näheres siehe
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_timesetevent.asp

von chrissy (Gast)


Lesenswert?

Aber eigentlich dachte ich, daß so stattdessen die Rückruffunktion
TimerProc() direkt von Windows aufgerufen wird und eben nicht die
WM_TIMER  in der Windows Prozedur abgearbeitet werden muss - ich also
auch keine Windows Prozedur brauche...
Deswegen hab ich TimerProc() ja in SetTimer benutzt und nicht NULL.

Werd mal timeSetEvent untersuchen und gucken ob ich da was
weiterkomme.
danke erst mal

von Rufus T. Firefly (Gast)


Lesenswert?

Der von mir zitierte Text stammt aus der Microsoft-Dokumentation der
Win32-API-Funktion SetTimer.

von chrissy (Gast)


Lesenswert?

Jo, da war ich ganz schön auf dem Holzweg... komich. Denke ich werde mir
noch mal meine Überlegungen durch den Kopf gehen lassen müssen.

Prima Tip von Dir die mmsystem.h! Der Timer klappt jetzt und alleine
wäre ich wohl im Leben nicht auf die Multimediafunktionen gestoßen.
besten Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.