Regelmäßig bestimmte Funktion aufrufen
-
Ich schreibe eine Win32 DLL (ohne Fenster nur u.a. mit einer Klasse "Scanner"). In der Klasse Scanner ist eine Methode StartScan(), nach deren Aufruf alle 500ms eine Funktion aufegrufen werden soll. Da dachte ich mir, dass ich das mit SetTimer() machen kann. Also hab ich in der StartScan()-Methode
timer = SetTimer(NULL, 0, 500, TimerProc);aufgerufen (timer ist eine Membervariable des Scanner-Objekts.
TimerProc hab ich als freie Funktion wie folgt definiert:VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)Scheint aber nicht zu funktionieren... die TimerProc-Funktion wird nie aufgerufen, obwohl die SetTimer-Funktion einen korrekten timer-Identifier zurückgibt.
Was mache ich falsch. Und gibtes vielleicht andere Möglichkeiten das beschriebene Problem zu lösen?
-
Du brauchst auf jeden Fall eine Nachrichtenschleife damit es funktioniert.
-
Und wie bekomme ich die ohne Fenster?
Oder gibt's sonst noch eine Möglichkeit eine Funktion in einem bestimmten Zeitabstand aufzurufen?
-
Trolli schrieb:
Du brauchst auf jeden Fall eine Nachrichtenschleife damit es funktioniert.
-
miller_m schrieb:
Trolli schrieb:
Du brauchst auf jeden Fall eine Nachrichtenschleife damit es funktioniert.
Tja wie gesagt, ich hab in der DLL kein Fenster (und will auch keines) und somit auch keine Nachrichtenschleife. Die DLLMain verarbeitet ja wohl keine Nachrichten, oder doch?
Jetzt mal von SetTimer abgesehen... Es muß doch irgendeine Möglichkeit, Funktion oder was weiß ich geben, die nicht mit WM_TIMER Nachrichten arbeitet, sondern einfach das tut, was ich will. Eine Funktion alle paar Millisekunden aufrufen.
-
Fenster brauchst du nicht.
Ich denke mal es könnte mit einem seperaten Thread funktionieren der den Timer startet und dann die Nachrichten verarbeitet. (GetMessage/DispatchMessage)
-
und was spricht gegen ein verstecktes fenster?
// oder so wie trolli
-
hallo,
nimm einen Thread, suche nach _beginthreadex.
_beginthreadex erfordert einen Paramter welcher die Adresse einer Funktion ist.
In dieser Funktion, kannst Du dann in einer Schleife und Sleep Deine Scans verarbeiten.MfG
RB
-
RED-BARON schrieb:
hallo,
nimm einen Thread, suche nach _beginthreadex.
_beginthreadex erfordert einen Paramter welcher die Adresse einer Funktion ist.
In dieser Funktion, kannst Du dann in einer Schleife und Sleep Deine Scans verarbeiten.MfG
RBHm, stimmmt... so könnte ich es vielleicht mal probieren. Danke sehr.