www.mikrocontroller.net

Forum: PC-Programmierung Win32 Konsolenanwendung und Timer


Autor: chrissy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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=...

Autor: chrissy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

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

Autor: chrissy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.