Killer un thread, mais pas comme un gros cochon :o [C++] - C++ - Programmation
Marsh Posté le 08-08-2002 à 17:16:22
BOOL stop = false; //variable globale
while(!stop)
{
Checkmails();
Sleep();
}
Et pour arrêter tu met stop = true;
Marsh Posté le 08-08-2002 à 17:22:23
ah oui pardon j'ai oublie de preciser certaines choses
Le pb c'est que le stop = true je pourrais le mettre seulement quand je ferme le programme (je clean tout le bordel). Hors le sleep bloque le thread, donc
Le seul moyen ce serait de faire un WaitForSingleObject, mais faudrait que fasse sleeper seulement de quelques secondes, histoire de que le processus principale n'attendent pas 1/2h que le thread se finisse. Mais bon ca c'est pas top.
edit: sinon je te remercie bien, j'me souvenais plus comment on sortait d'un while
Marsh Posté le 08-08-2002 à 18:33:46
ben tu chomes pas, toi, dis donc
edit : surtout quand on pense que je t'ai deja donne une solution
( fais pas un gros sleep mais moulte petit)
Sinon t'as regarder si la fonction resume reveillait une thread endornie par sleep ? je sais que l on en avait deja parler mais je ne ne souviens plus du resultat de la discu.....
(pis mince, je devrais pas te repondre, je suis en vacances )
Marsh Posté le 08-08-2002 à 18:36:35
putain m'en parle pas j'l'ai grave dans le cul en ce moment.
Marsh Posté le 08-08-2002 à 18:37:19
Godbout a écrit a écrit : putain m'en parle pas j'l'ai grave dans le cul en ce moment. |
See ze edit
Marsh Posté le 08-08-2002 à 18:44:17
chrisbk a écrit a écrit : See ze edit |
ouais mais nan, deja fait la decoupe en petit bout. Et le Resume il reveille pas le slip ( )
Putain pkoi j'ai fait info
Marsh Posté le 08-08-2002 à 18:46:52
Godbout a écrit a écrit : ouais mais nan, deja fait la decoupe en petit bout. Et le Resume il reveille pas le slip ( ) Putain pkoi j'ai fait info |
Parce que c'est ton destin
ben tu t'en fous, termine pas la thread, elle se terminera toute seul quand la thread principale se terminera (et basta )
Marsh Posté le 08-08-2002 à 18:53:11
Euh, tu fais un sleep de 1/2h?
C'est utile d'avoir un thread qui glande comme ca, crée les plutot dans ton programme toutes les 1/2h que d'avoir ton thread qui glande comme ca
Sinon comme dis plut haut, fait des sleep de 500ms dans une jolie boucle avec le boolean et hopla
Marsh Posté le 08-08-2002 à 18:57:53
Godbout a écrit a écrit : pis va t'amuser bordel |
J'attends que les autres zoinzoin en ait fini avec leur mail, et y tapent pas bien vite
Marsh Posté le 08-08-2002 à 19:01:29
Zion a écrit a écrit : Euh, tu fais un sleep de 1/2h? C'est utile d'avoir un thread qui glande comme ca, crée les plutot dans ton programme toutes les 1/2h que d'avoir ton thread qui glande comme ca Sinon comme dis plut haut, fait des sleep de 500ms dans une jolie boucle avec le boolean et hopla |
Ben le truc doit checker l'arrive d'un mail selon un timer defini par l'utilisateur, je vois pas comment faire ca autrement.
Le coup du 500ms c'est bien sympa, mais c'est un peu merdique. Pis en fait ca marche pas non plus
Marsh Posté le 08-08-2002 à 19:04:58
Benh utilise un timer!
Un timer qui crée ton thread qui lui se suicide quand il a fini.
Marsh Posté le 08-08-2002 à 19:11:53
Juste une kestion au hasard comme ca .... GodBoot , tu ferais pas infos indus au moins ?
Marsh Posté le 08-08-2002 à 19:13:08
Zion a écrit a écrit : Benh utilise un timer! Un timer qui crée ton thread qui lui se suicide quand il a fini. |
Ah tiens, c pas con ca
c meme tres intelligent !
(cherche du cote de CreateTimer)
Marsh Posté le 08-08-2002 à 19:16:27
ben oui, SetTimer() ...
Godbout a écrit a écrit : Putain pkoi j'ai fait info |
putain pourquoi tu choisis des solutions hyper compliquées
Marsh Posté le 08-08-2002 à 19:30:02
boborde a écrit a écrit : Juste une kestion au hasard comme ca .... GodBoot , tu ferais pas infos indus au moins ? |
nan
Marsh Posté le 08-08-2002 à 19:30:35
youdontcare a écrit a écrit : ben oui, SetTimer() ...putain pourquoi tu choisis des solutions hyper compliquées |
Je vois ca demain, mais en fait le pb n'a pas l'air de venir de la
edit: enfin la j'avais tout le bordel a queue qui marchait quoi, juste que sous cette merde de 98 y a kernel qui fait son caca nerveux
Marsh Posté le 08-08-2002 à 19:34:14
youdontcare a écrit a écrit : ...putain pourquoi tu choisis des solutions hyper compliquées |
Pour info j'avais fait un topic y a quelques semaines, on m'a repondu le thread + sleep (merci chris )
Marsh Posté le 08-08-2002 à 19:35:45
Godbout a écrit a écrit : Pour info j'avais fait un topic y a quelques semaines, on m'a repondu le thread + sleep (merci chris ) |
G aussi mon quota de connerie a dire
bon, zont fini, ++
Marsh Posté le 08-08-2002 à 20:39:10
chrisbk a écrit a écrit : G aussi mon quota de connerie a dire bon, zont fini, ++ |
Ouai, comme le coup du Resume qui couperait le sleep
Non mais le problème c'est que tu es pas dans les 2 rubriques hype, Java ou Delphi.
Perso je vais que dans les topics Delphi, mais bon, je sais pas, j'ai été attiré par le sujet
Marsh Posté le 08-08-2002 à 22:22:15
Sinon tu peux sans doute faire un waitforsingleobjectEx en mettant ton thread en alertable, puis avant de sortir, balancer une APC qui le fait juste faire un return.
Si ça marche, l'avantage c'est que c'est propre (1000 fois plus qu'un TerminateThread). Mais bon c'est très théorique j'ai jamais essayé.
Marsh Posté le 09-08-2002 à 10:43:25
Le WaitFor deja fait, par contre APC connait pas
Sinon j'essaye avec un SetTimer, je pense que je devrais pouvoir arriver a quelque chose (:sarcastic, mais bon si le timer se balance pendant que mon prog fait autre chose ca fait koi ?
Marsh Posté le 09-08-2002 à 12:30:03
Godbout a écrit a écrit : Le WaitFor deja fait, par contre APC connait pas Sinon j'essaye avec un SetTimer, je pense que je devrais pouvoir arriver a quelque chose (:sarcastic, mais bon si le timer se balance pendant que mon prog fait autre chose ca fait koi ? |
Le timer, il envoie juste un message, il me semble. Donc, faut que ton appli regarde sa liste de messages de temps en temps.
Marsh Posté le 09-08-2002 à 14:23:01
mrbebert a écrit a écrit : Le timer, il envoie juste un message, il me semble. Donc, faut que ton appli regarde sa liste de messages de temps en temps. |
Ouaip, c'est exactement ca
Marsh Posté le 09-08-2002 à 14:28:53
Zion a écrit a écrit : Ouai, comme le coup du Resume qui couperait le sleep Non mais le problème c'est que tu es pas dans les 2 rubriques hype, Java ou Delphi. Perso je vais que dans les topics Delphi, mais bon, je sais pas, j'ai été attiré par le sujet |
of je vois pas ce que ca a de si incongru, pouvoir sortir une thread d'un sleep ne me parait pas etre une chose completement idiote, et le resume est justement la pour reveiller une thread, alors....
Marsh Posté le 09-08-2002 à 14:30:00
Zion a écrit a écrit : Ouaip, c'est exactement ca |
nonske tu peux aussi t'arranger pour que plutot que de t'envoyer un msg il appelle une fonction (je sais plus c quoi la fonction de creation du timer, mais c largement plus pratique)
Marsh Posté le 09-08-2002 à 14:36:17
chrisbk a écrit a écrit : of je vois pas ce que ca a de si incongru, pouvoir sortir une thread d'un sleep ne me parait pas etre une chose completement idiote, et le resume est justement la pour reveiller une thread, alors.... |
Pour réveiller un thread que tu as suspendu et qui ne sera plus séléctionné par ton task manager... A moins que le sleep ne soit géré au niveau du task manager (la franchement j'ai un énorme doute), ca me parait fort peu probable.
Sinon euh, c'est pas plus mal le coup du message pour le timer tu sais, ca te permet au moins de savoir que t'es rien en train de faire vu que t'es en train de pouvoir gérer les messages.
Marsh Posté le 09-08-2002 à 14:50:09
chrisbk a écrit a écrit : nonske tu peux aussi t'arranger pour que plutot que de t'envoyer un msg il appelle une fonction (je sais plus c quoi la fonction de creation du timer, mais c largement plus pratique) |
C'est ce que j'ai fait pour l'instant, je renvoie a une fonction qui traite ce que j'ai a faire, mais en fait le pb vient d'autre chose, bon c'est la merde en fait
Marsh Posté le 09-08-2002 à 14:51:46
Godbout a écrit a écrit : C'est ce que j'ai fait pour l'instant, je renvoie a une fonction qui traite ce que j'ai a faire, mais en fait le pb vient d'autre chose, bon c'est la merde en fait |
Oups, désolé
Marsh Posté le 09-08-2002 à 14:56:11
Godbout a écrit a écrit : C'est ce que j'ai fait pour l'instant, je renvoie a une fonction qui traite ce que j'ai a faire, mais en fait le pb vient d'autre chose, bon c'est la merde en fait |
tu nous as encore pondu un gros sac de noeud, toi
Marsh Posté le 09-08-2002 à 14:56:37
Nan en fait c'est la merde parce que je sais pas ce que le prog principale fait, et apparemment c'est lui qui merde dans son clean up.
(ca veut rien dire mais je me comprends)
Marsh Posté le 09-08-2002 à 14:56:53
chrisbk a écrit a écrit : tu nous as encore pondu un gros sac de noeud, toi |
Marsh Posté le 09-08-2002 à 14:59:15
Godbout a écrit a écrit : Nan en fait c'est la merde parce que je sais pas ce que le prog principale fait, et apparemment c'est lui qui merde dans son clean up. (ca veut rien dire mais je me comprends) |
Excuse bidon detaictaid
Marsh Posté le 10-08-2002 à 05:53:00
Pourquoi cela ne marcherait'il pas ?
Code :
|
Marsh Posté le 12-08-2002 à 17:14:44
Sympa comme idee mais j'ai laisse tomber les threads, je passe maitenant par un timer, plus de pb, ca fait chier mais bon.
Marsh Posté le 12-08-2002 à 17:24:53
musaran a écrit a écrit : Pourquoi cela ne marcherait'il pas ?
|
C pas pour critique mais ton for il est assez moche là, un while ne serai pas plus aproprié (d'un point de vue purement estéthique) ?
Bon ok ça marche le for, mais je trouve ça assez moche là. Ca vient peut être de moi remarque.
Marsh Posté le 08-08-2002 à 17:11:52
J'ai fait un thread qui checke chaque laps de temps si des mails sont arrives.
Donc en gros j'ai un
Le pb c'est que pour killer le thread je fais un TerminateThread (pas tres propre ), ca passe sous 2k, mais sous 98 c'est la catastrophe (message box kernel32 dans le vent en continu, reboot oblige).
Quelqu'un aurait il une autre technique pour faire ce que j'ai a faire ?
merci
---------------
Super.