Kann ich eine SetTimer () - API in einer Konsolen-C ++ - Anwendung verwenden?

8

Ich habe eine Konsolenanwendung, die eine DLL-Datei verwendet, die einen SetTimer() Aufruf verwendet, um einen Timer zu erstellen und eine Funktion in sich selbst auszulösen. Der Anruf ist unten:

%Vor%

Es wird erwartet, Timer-Nachrichten zu empfangen, aber das passiert nie. Ich gehe davon aus, dass es sich bei mir um eine Konsolenanwendung und nicht um eine Standard-Windows-GUI-Anwendung handelt (z. B. wo die DLL-Datei ursprünglich verwendet wurde). Dies hält einen wichtigen Teil der Funktionalität der DLL-Dateien davon ab, zu arbeiten.

Meine Anwendung muss eine Konsolenanwendung bleiben und ich kann die DLL nicht ändern.

Gibt es eine Arbeit, um das funktionieren zu lassen?

    
JallenA1 23.09.2011, 15:52
quelle

6 Antworten

9

Sie können die Funktion CreateTimerQueueTimer verwenden

%Vor%     
Marx Yu 24.09.2012 11:42
quelle
5

Bei Zeitgebern, die mit der API SetTimer festgelegt wurden, muss eine Windows-Nachrichtenverarbeitungsfunktion aktiv ausgeführt werden, da dort die Zeitnachrichten gesendet werden.

Wenn Sie einen Timer-Thread benötigen, können Sie eine Window-Klasse registrieren und eine Standard-Window-Message-Pumpe erstellen (siehe Dieser Artikel für ein kurzes Beispiel), aber ein einfacherer Prozess wäre wahrscheinlich, nur einen zweiten Thread hochzufahren, um Ihre Timing-Ereignisse zu verarbeiten und Benachrichtigungen zu senden.

    
Chad 23.09.2011 15:56
quelle
3

Sehen Sie sich das folgende Beispiel an, das zeigt, wie Sie WM_TIMER-Nachrichten mit einer Konsolenanwendung verwenden können:

(Guthaben auf der Website simplesamples.info )

%Vor%     
Michael Goldshteyn 23.09.2011 15:56
quelle
1

Haben Sie Waitable Timer in Betracht gezogen? oder Timer-Warteschlangen ? Es ist zwar möglich, SetTimer über eine Konsolenanwendung zu verwenden, diese anderen Funktionen sind jedoch möglicherweise besser für Sie geeignet.

    
Aaron Klotz 23.09.2011 18:19
quelle
1
  

Verwenden von Timer-Warteschlangen

     

Erstellt einen Timer-Queue-Timer. Dieser Timer läuft am angegebenen Fälligkeitsdatum ab   Zeit, dann nach jeder bestimmten Zeit. Wenn der Timer abläuft, wird die   Callback-Funktion wird aufgerufen.

     

Das folgende Beispiel erstellt eine Timer-Routine, die von ausgeführt wird   ein Thread aus einer Timer-Warteschlange nach einer 10 zweite Verzögerung. Zuerst die   Der Code verwendet die CreateEvent -Funktion zum Erstellen ein Ereignisobjekt   das wird signalisiert, wenn der Timer-Queue-Thread abgeschlossen ist. Dann es   erstellt eine Timer-Queue und einen Timer-Queue-Timer mit dem    CreateTimerQueue und CreateTimerQueueTimer-Funktionen,   beziehungsweise. Der Code verwendet die Funktion WaitForSingleObject   Bestimmen, wann die Timer-Routine abgeschlossen ist. Endlich der Code   ruft DeleteTimerQueue auf, um aufzuräumen.

Weitere Informationen zur Timer-Routine finden Sie unter WaitOrTimerCallback .

Beispielcode von MSDN:

%Vor%

Dies ist ein weiterer Beispielcode aus MSDN

Dies ist ein weiteres Beispiel aus Codeproject

%Vor%

Ressource:

Elshan 14.07.2016 12:59
quelle
0

Sehr einfacher Timer ohne Windows

%Vor%     
Alan10977 03.06.2015 02:20
quelle

Tags und Links