Callback Timer
-
Hi,
hab irgenwie die MSDN-Settimer Beschreiben missverstanden. Benutze es wie folgt:...
SetTimer(ID_TIMER, 1000, OnTimer);
......
void CALLBACK EXPORT CTabAuftraege::OnTimer(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
{
return (0);
}
...Da sagt er mir immer bei "SetTimer(..."
Konvertierung des Parameters 3 von 'void (HWND,UINT,UINT,DWORD)' in 'void (__stdcall *)(HWND,UINT,UINT_PTR,DWORD)' nicht möglich<<
Aber ich hab die Funktion genau wie in der MSDN beschrieben.
Wo für steht denn (__stdcall *), wie kann ich den Fehler Korrigieren?
-
BEGIN_MESSAGE_MAP(...) ON_WM_TIMER() ... SetTimer( ID_TIMER, 1000, NULL);
-
Ja nein...
also ich möchte das meine CALLBACK Procedur nur bei dem einen Timer aufgerufen wird.
Und nicht bei alle Timern. Wenn ich auf die Message zurückgreife "WM_TIMER", wird die immer aufgeführt, bei allen Timern!?Oder sehe ich das falsch?
-
dann muss deine Callback-Funktion mit 'static __stdcall' definiert sein
-
Argh,...
aber aber aber... das is dann ja static damit kann ich nicht wirklich viel anfangen gibt es sowas nicht als unstatic!?
-
Da hilft nur: Selber Basteln
1.) Eigenen static Thread Starten
2.) in deiner Klasse eine Memeberfkt. definieren, die bei jedem Timer
aufgerunfen werden soll.
3.) als Parameter deines Threads den this Zeiger deiner Klasse übergebenn
4.) in dem Thread mit 'ner while Schleife ständig durchlaufen
5.) Deine in 2.) angelegte Memberfkt aufrufen im Thread aufrufen
6.) Sleep(UINT uiTimeToElapse); //Thread anhaltenUnd schon hast du ein Timerverhalten, das unabhängig von WM_TIMER läuft. Es ist quasi eine "Umleitung" von deiner static ThreadProc(..) in eine Memberfkt.
Es giebt da irgendwo auf codeproject.com ein paar sehr schöne Artikel darüber, wie man _stcall Fkt im allgemeinen in seine C++ Projekte einbinden kann.