Minuterie pour implémenter une fonction de temporisation

J’écris un programme Windows (Win32) en C, qui comporte un thread de travail pour traiter les données d’un périphérique matériel USB. La gestion des threads fonctionne bien, mais je dois maintenant append une timer pour gérer une fonction de délai d’attente. Je n’ai pas besoin d’une fonction de rappel, mais seulement de la possibilité de démarrer une timer, et de pouvoir tester le temps qu’il fait sans dormir, quelque chose comme ceci:

start_timout(1000); // 1 second while (timer_is_running()) { doing stuff while waiting... . . . } do stuff after timer is finished... . . . 

Ce serait en cours d’exécution à l’intérieur du thread de travail.

J’ai examiné SetTimer () et essayé de créer une fonction de rappel qui définit simplement un indicateur global, puis teste l’indicateur, mais celui-ci n’est jamais défini. Je ne sais pas si c’est parce que je n’ai pas de gestionnaire de messages dans mon thread.

Toutes les suggestions sont les bienvenues. A la vôtre!

SetTimer nécessite que vous capturiez l’événement WM_TIMER dans une fenêtre. De plus, il n’est pas très précis. Je ne conseillerais pas de l’utiliser.

Au lieu de cela, vous pouvez simplement créer un autre thread, laissez-le ne faire que Sleep () pour la période spécifiée (vous pouvez passer le temps en paramètre lors de la création du thread). Vous pouvez ensuite WaitForSingleObject(sleeper_thread, 0) pour vérifier si le délai a expiré.

Merci pour votre réponse, quelque chose fonctionnait assez rapidement. Voici une synthèse de mon code de travail:

 #include  static void func(void) { HANDLE hTimer = NULL; LARGE_INTEGER liDueTime; liDueTime.QuadPart = -5000000LL; // 0.5 seconds //liDueTime.QuadPart = -20000000LL; // 2 seconds //liDueTime.QuadPart = -100000000LL; // 10 seconds hTimer = CreateWaitableTimer(NULL, TRUE, NULL); SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0); while (WaitForSingleObject(hTimer, 0) == WAIT_TIMEOUT) { do stuff } } 

Cordialement, Toonie.