win Timer
-
Hi
Ich habe jetzt schon eine Weile gesucht, auch in diesen Forum und bei google. Ich habe nichts gescheites gefunden.
Ich brauche einen Timer der mir unabhängig vom restlichen Programm, immer wieder eine Funktion aufruft. Der muss ich unglaublich genau sein, alle 10 ms +- 10 ms reicht vollkommen auf. bloß darf das warten darauf nicht das restliche Programm lahmlegen.
ich habe folgendes Programm gefunden (zwei Beispiele von mir zusammengefasst zu einen, hier aus den Forum):
void CALLBACK MyTimerProc( HWND hwnd, // handle to window for timer messages UINT message, // WM_TIMER message UINT idTimer, // timer identifier DWORD dwTime) // current system time { printf("\nHallo."); } int main() { UINT_PTR myTimer = SetTimer( 0, //Handle zum Fenster (haben wir nicht) 0, //Identifier für den Event (wenn's mehrere Timer pro Fenster gibt, aber wir haben ja kein Fenster...) 1000, //Intervall auf 1000 Millisekunden (= 1 Sekunde) MyTimerProc); //Zeiger auf die Timer-Behandlungs-Funktion if(myTimer) { MSG myMessage; while(GetMessage(&myMessage, 0, WM_TIMER, WM_TIMER)) { DispatchMessage(&myMessage); //empfangene Nachricht weiterleiten //mache irgendwas (oder auch nicht) } KillTimer(0, myTimer); } else std::cout << "Timer konnte nicht erstellt werden." << std::endl; }doch da hängt die Anwendung in der while-schleife. mir würde es besser gefallen wenn die Funktion MyTimerProc, selbstständig aufgerufen wird, mit so eine art Interrupt.
nun habe ich gelesen das kann man mit SetWaitableTimer, bloß die beispiele die ich gefunden habe machen das ähnlich mit einer Warteschleife
noch eine frage am rande, wie bekomme ich "handle to main window"(HWND) von meinen "main window"?
ich hoffe ihr könnt mir helfen. Danke schon mal für die Mühe des Lesens.
Gruß
Lom
-
Am einfachsten wäre es wenn du ein Fenster erzeugst um ein Window-handle zu haben. Das Konsolenfenster zu mißbrauchen wird vermutlich auch nicht wirklich klappen.
Oder mach nen zweiten Thread, warte da drin deine paar ms und ruf dann nach Ablauf der Wartezeit deine Funktion auf.
-
ich möchte eine dll schreiben. das Konsolenprogramm ist nur zum testen. das mit den zweiten thread wäre natürlich eine Möglichkeit.
Ich wollte senden und empfangen (über USB) funktions und zeittechnisch voneinander trennen.