Comment relancer un Thread après sa création? [URGENT] - C++ - Programmation
Marsh Posté le 06-01-2006 à 10:22:59
j'ai pas bien compris ton histoire ...
Code :
|
Marsh Posté le 06-01-2006 à 10:30:00
blackgoddess a écrit : j'ai pas bien compris ton histoire ...
|
Merci pour ta réponse super rapide
Alors pour t'expliquer brievement, je lance le thread à l'initialisation de l'application. Au au cours de l'exécution du programme principal, je désire avoir un thread qui tourne en fond de tache (sans bloquer l'appli) et qui vérifiera l'heure du système et déclenchera les évenements.
le while utiliser dans MyFirstThreadTimer() bloque l'appli ou tourne en fond de tache?
Marsh Posté le 06-01-2006 à 10:42:57
blackgoddess a écrit : j'ai pas bien compris ton histoire ... |
ca marche et ca ne bloque pas l'appli, nickel
Code :
|
Marsh Posté le 06-01-2006 à 10:43:23
bin c'est 2 threads differents ... 2 fils d'execution indépendants, c'est le concept meme d'un thread.
apres pour pas qu'il claque le cpu pour rien, faut utiliser une api bloquante dans le while (attente d'un evenement, sleep, ...)
Marsh Posté le 06-01-2006 à 11:16:57
BlackGoddess, j'aurais une autre question à te poser ou aux autres si vous savez
Je voudrais créer un Thread et le lancer manuellement autant de fois que je le désire sans avoir à le recréer à chaque fois, est ce possible? si oui, comment faire?
Voici ce que j'ai fais mais ca ne marche pas, il ne le lance qu'une fois.
Code :
|
Marsh Posté le 06-01-2006 à 19:31:54
Faut pas le lancer plusieurs fois. Une fois créé et démarré, il continue à tourner indéfiniment
(bon, il y a surement moyen de le mettre en pause et de le relancer depuis le thread principal mais c'est pas indispensable)
Marsh Posté le 06-01-2006 à 19:58:42
mrbebert, je t'explique j'ai 2 threads:
- un thread timer qui tourne indféfiniment
- un autre thread que je voudrais appeler quand je veux sans avoir à le recréer? ou alors il faut que je le créer à chaque fois ke j'ai besoin de ce thread?
Marsh Posté le 06-01-2006 à 20:09:17
Faut voir avec des fonctions qui permettent de mettre en pause le thread et de le redémarrer. Il fait ce qu'il a à faire et se met en pause. Le programme principal pouvant le relancer en cas de besoin
Marsh Posté le 06-01-2006 à 20:52:07
Quelque chose dans ce genre :
Code :
|
Le thread fait ses traitement une fois, puis se met en pause. Il bouclera pour refaire ses traitements lorsque le thread principal le réveillera avec la fonction ResumeThread()
Marsh Posté le 08-01-2006 à 15:53:15
Le main:
Code :
|
Le thread:
Code :
|
Voici ce que j'ai fais, j'ai stocké le HANDLE précédemment crée dans un singleton, je le récupère et suspend le thread comme me la suggéré mrbebert. Le seul problème c'est qu'il bloque toute l'appli... Après SuspendThread, il n'y a plus rien... Donc je ne pense pas que ca soit la bonne méthode ou alors je l'utilise mal???
Marsh Posté le 08-01-2006 à 16:19:08
Pour résumé mon besoin, je souhaite:
- créer un thread: threadTimer.
- lancer et suspendre l'activité de ce thread où je veux dans l'appli sans bloquer l'appli
Quelle est la méthode à utiliser, sachant que je lancerai ce thread au minimum 5 fois?
Resume et Suspend ou plutôt créer le thread quand j'en ai besoin puis le refermer.
Si vous avez des exemples de code je suis preneur.
Marsh Posté le 08-01-2006 à 20:50:38
infoprice a écrit : ... |
Le thread est en pause. Donc il ne fait rien tant que quelqu'un d'autre ne l'a pas réveillé. Or, le programme principal ne fait rien après avoir créé ce thread. Donc, effectivement, il ne se passe plus rien, l'appli semble bloqué.
Il faut que ce soit le programme principal qui, de temps en temps, réveille le thread
Marsh Posté le 09-01-2006 à 10:31:32
mrbebert a écrit : Le thread est en pause. Donc il ne fait rien tant que quelqu'un d'autre ne l'a pas réveillé. Or, le programme principal ne fait rien après avoir créé ce thread. Donc, effectivement, il ne se passe plus rien, l'appli semble bloqué. |
DWORD dwWait = ResumeThread(hThreadTimer); qui est dans le main ne réveille pas le thread?
Marsh Posté le 09-01-2006 à 11:24:09
Si. Il le réveille une fois, le thread fait un passage dans la boucle se met en pause. Mais le programme principal ne revient jamais pour réveiller de nouveau le thread
Il faut faire en sorte que le programme principal vienne régulièrement re-réveiller le thread qui se remet toujours en pause.
Marsh Posté le 06-01-2006 à 10:17:18
Salut à tous, j'ai besoin de votre aide
je suis en train de bosser sur un thread qui devra tourner pdt toute la durée d'exécution de l'appli et s'occupera de vérifier l'heure de la machine. Le thread lancera des événements en fonction de l'heure trouvée.
Pour le moment, j'arrive à créer le thread et le lancer mais il ne se lance qu'une fois alors que je voudrais qu'il se lance en boucle et se termine seulement lorsque le client quitte l'appli.
Avez vous une idée, un exemple pour m'aider?
Merci pour votre aide précieuse.
Message édité par infoprice le 06-01-2006 à 12:19:04