Puis-je utiliser une API SetTimer() dans une console en C++ de l'application?
J'ai une application console qui est à l'aide d'un fichier DLL qui utilise un SetTimer()
appel à créer une minuterie et d'incendie d'une fonction à l'intérieur de lui-même. L'appel ci-dessous:
SetTimer((HWND)NULL, 0, timer_num, (TIMERPROC)UnSyncMsgTimer)) == 0)
Il s'attend à recevoir les messages de la minuterie, mais cela n'arrive jamais. Je suppose que parce que la mienne est une application de console et pas un standard de Windows interface graphique de l'application (comme l'endroit où le fichier DLL a été initialement utilisé). Cela empêche une partie de la clé des fichiers DLL fonctionnalités de travail.
Mon application doit rester une application console, et je ne peux pas changer la DLL.
Est-il du travail pour faire ce travail?
SetTimer()
.OriginalL'auteur JallenA1 | 2011-09-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser CreateTimerQueueTimer fonction
OriginalL'auteur Marx Yu
Minuteries défini à l'aide de la
SetTimer
API besoin d'un message de Windows de traitement de la fonction en cours d'exécution, car c'est là que l'envoi des messages.Si vous avez besoin d'une minuterie de filetage alors vous pourriez inscrire une classe de Fenêtre et de créer une valeur par défaut de la fenêtre de message de la pompe (Voir cet article pour un court exemple), mais un processus plus simple serait probablement juste de lancer un deuxième thread pour gérer votre calendrier des événements et envoyer des notifications.
Peek/GetMessage()
,TranslateMessage()
, etDispatchMessage()
.Ce conseil a été très utile pour moi. J'ai créé un simple fil, et le fil traiter les appels
Sleep()
, puis se réveille et exécute sa tâche. Une fois que vous m'avez donné l'idée je l'ai fait rapidement, merci!OriginalL'auteur Chad
Ont un coup d'oeil à l'exemple suivant qui montre comment utiliser les messages WM_TIMER avec une application console:
(Crédit à la simplesamples.info site)
Quand allez-vous sortir de la boucle while? Il n'y a rien de poster un message de / quit là-haut, et il n'y a pas de retour, de casser ou de les jeter ...
il n'a pas nécessairement besoin d'être dans un thread séparé. La boucle peut utiliser
MsgWaitForMultipleObjects()
ouGetQueueStatus()
pour détecter le moment où les messages sont prêtes pour la transformation, et peut faire d'autres choses à faire dans l'intervalle.Vrai, mais si vous avez de l'expérience avec les programmes multithread déjà, puis en faisant le moment dans un thread est insignifiant en comparaison à faire avec un message WM_TIMER et les constructions pour le faire fonctionner correctement.
OriginalL'auteur Michael Goldshteyn
Avez-vous envisagé de Waitable Minuteries ou Les Files D'Attente De Minuterie? Alors qu'il est possible d'utiliser
SetTimer
à partir d'une application console, ces autres installations pourrait être plus approprié pour vous.OriginalL'auteur Aaron Klotz
Pour plus d'informations sur le timer de la routine, de voir
WaitOrTimerCallback
.Exemple de code à partir de MSDN:
C'est un autre exemple de code à partir de MSDN
C'est un autre exemple de Codeproject
Ressource:
OriginalL'auteur Elshan
Très simple minuterie sans Windows
OriginalL'auteur Alan10977