thread , suspension et reprise [win32 et linux] - C - Programmation
MarshPosté le 14-02-2006 à 10:13:16
bonjour,
je suis confronté à un problème. J'ai une tâche exécutée par un thread qui fonctionne de la facon suivante :
Code :
while (1) {
Sleep(2000); // endormir le thread pendant 2000 ms
mutex.Lock();
// executer toutes les taches de ma liste s'il y en a
while (GetNextCommand(cmd)) {
cmd.Execute();
}
mutex.Unlock();
}
Toutes les 2 secondes, le thread va donc voir s'il y a des tâches a executer dans une liste. Jusque la, tout va bien.
Par contre, il est possible d'ajouter d'autres tâches à effectuer à n'importe quel moment (par exemple lorsqu'on appuie sur un bouton). Le problème est qu'il faudrait que je réveille mon thread sans attendre la fin du Sleep(2000)
Et je n'ai pas trouvé de mécanisme pour faire ca sous windows. En effet, la fonction ResumeThread() fonctionne avec la fonction SuspendThread() qui ne fait qu'incrémenter/décrémenter un compteur de suspension sans notion de temps. Il y a bien la fonction WaitForSingleObject que je peux appeler sur mon handle de thread avec un temps , ce qui revient à faire un Sleep, mais je ne vois pas comment signaler mon thread pour qu'il sorte du WaitForSingleObject.
De plus, je dois également mettre en place ce mécanisme sous linux avec les pthread, et je ne vois pas du tout comment m'y prendre, à part peut etre avec les pthread_cond_*
Marsh Posté le 14-02-2006 à 10:13:16
bonjour,
je suis confronté à un problème. J'ai une tâche exécutée par un thread qui fonctionne de la facon suivante :
Toutes les 2 secondes, le thread va donc voir s'il y a des tâches a executer dans une liste. Jusque la, tout va bien.
Par contre, il est possible d'ajouter d'autres tâches à effectuer à n'importe quel moment (par exemple lorsqu'on appuie sur un bouton). Le problème est qu'il faudrait que je réveille mon thread sans attendre la fin du Sleep(2000)
Et je n'ai pas trouvé de mécanisme pour faire ca sous windows. En effet, la fonction ResumeThread() fonctionne avec la fonction SuspendThread() qui ne fait qu'incrémenter/décrémenter un compteur de suspension sans notion de temps. Il y a bien la fonction WaitForSingleObject que je peux appeler sur mon handle de thread avec un temps , ce qui revient à faire un Sleep, mais je ne vois pas comment signaler mon thread pour qu'il sorte du WaitForSingleObject.
De plus, je dois également mettre en place ce mécanisme sous linux avec les pthread, et je ne vois pas du tout comment m'y prendre, à part peut etre avec les pthread_cond_*
Merci d'avance pour vos réponses