Il existe deux manières distinctes d'implémenter un temporisateur en utilisant des rappels dans Windows, SetTimer et timeSetEvent. Les bases sont:
SetTimer utilise des messages, même si vous utilisez un rappel (la fonction de rappel est appelée à la suite de traitement d'un message). Par conséquent, SetTimer n'est pas viable si vous n'exécutez pas de pompe de message. Les rappels sont appelés par le système d'exploitation, qui ne connaît pas un pointeur "this" C++ à partir d'un trou dans le sol, donc votre callback doit être soit une fonction globale C-style ou un membre statique.
timeSetEvent fait partie de la famille de temporisateurs "multimédias" et ne nécessite pas de pompe de message. Les observations sur la signature de la fonction de rappel ci-dessus s'appliquent quand même. Le manque d'exigence pour une pompe de message peut être important si vous écrivez une application de console cependant.
Vous pouvez également envisager threading et CreateWaitableTimer, mais je n'utilise pas souvent les minuteurs attentistes donc je ne peux pas les commenter.
Si vous avez besoin de travailler en arrière-plan, l'enfilage peut être un moyen beaucoup plus élégant de résoudre le problème. Vous n'avez pas à diviser le travail en morceaux lorsque vous êtes en train de filer (ce que vous faites si vous lancez le travail à partir d'une minuterie).Mais bien sûr, votre thread ne peut pas toucher l'interface graphique, donc la vie peut devenir un peu compliqué quand vous commencez à enfiler. Il y a une introduction aux fils de travail sur mon site Web here.
Système d'exploitation? Avez-vous l'intention d'utiliser la fonctionnalité Op Sys ou de rouler la vôtre? – Elemental
Le système d'exploitation est Windows. Ils m'ont montré des trucs win32 aussi – NeverAgain