[C++] Killer un thread, mais pas comme un gros cochon :o

Killer un thread, mais pas comme un gros cochon :o [C++] - C++ - Programmation

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  

Code :
  1. while(1)
  2. {
  3. checkmails();
  4. Sleep(timer);
  5. }


 
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 [:smack]


---------------
Super.
Reply

Marsh Posté le 08-08-2002 à 17:11:52   

Reply

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;


Message édité par antsite le 08-08-2002 à 17:16:50
Reply

Marsh Posté le 08-08-2002 à 17:22:23    

ah oui pardon j'ai oublie de preciser certaines choses :D
 
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 [:fifiz]
 [:ddr555]


Message édité par godbout le 08-08-2002 à 17:22:52

---------------
Super.
Reply

Marsh Posté le 08-08-2002 à 18:33:46    

ben tu chomes pas, toi, dis donc :D
 
edit : surtout quand on pense que je t'ai deja donne une solution [:titprem]
( 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 :O :D)


Message édité par chrisbk le 08-08-2002 à 18:36:53
Reply

Marsh Posté le 08-08-2002 à 18:36:35    

putain m'en parle pas j'l'ai grave dans le cul en ce moment.


---------------
Super.
Reply

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 ;)

Reply

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 ( :D ) :sweat:
 
Putain pkoi j'ai fait info :cry:


---------------
Super.
Reply

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 ( :D ) :sweat:
 
Putain pkoi j'ai fait info :cry:




 
Parce que c'est ton destin :O
 
ben tu t'en fous, termine pas la thread, elle se terminera toute seul quand la thread principale se terminera (et basta :O )

Reply

Marsh Posté le 08-08-2002 à 18:49:25    

nan justement ca chie grave :D


---------------
Super.
Reply

Marsh Posté le 08-08-2002 à 18:50:56    

pis va t'amuser bordel :o


---------------
Super.
Reply

Marsh Posté le 08-08-2002 à 18:50:56   

Reply

Marsh Posté le 08-08-2002 à 18:53:11    

Euh, tu fais un sleep de 1/2h?  :ouch:  
 
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  :D


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 08-08-2002 à 18:57:53    

Godbout a écrit a écrit :

pis va t'amuser bordel :o




 
J'attends que les autres zoinzoin en ait fini avec leur mail, et y tapent pas bien vite [:ddr555]

Reply

Marsh Posté le 08-08-2002 à 19:01:29    

Zion a écrit a écrit :

Euh, tu fais un sleep de 1/2h?  :ouch:  
 
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  :D  




 
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 :sweat:


---------------
Super.
Reply

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.
 
 ;)


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 08-08-2002 à 19:11:53    

Juste une kestion au hasard comme ca .... GodBoot , tu ferais pas infos indus au moins ?

Reply

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 :D
 
c meme tres intelligent !
 
(cherche du cote de CreateTimer)

Reply

Marsh Posté le 08-08-2002 à 19:16:27    

ben oui, SetTimer() ...

Godbout a écrit a écrit :

Putain pkoi j'ai fait info :cry:


putain pourquoi tu choisis des solutions hyper compliquées :cry:

Reply

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 :sweat:


---------------
Super.
Reply

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 :cry:




Je vois ca demain, mais en fait le pb n'a pas l'air de venir de la :sweat: :D
 
 
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 :mad:


Message édité par godbout le 08-08-2002 à 19:31:47

---------------
Super.
Reply

Marsh Posté le 08-08-2002 à 19:34:14    

youdontcare a écrit a écrit :

...putain pourquoi tu choisis des solutions hyper compliquées :cry:




Pour info j'avais fait un topic y a quelques semaines, on m'a repondu le thread + sleep (merci chris :D)


---------------
Super.
Reply

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 :D)




 
:D
 
G aussi mon quota de connerie a dire :D :O
 
bon, zont fini, ++ :O

Reply

Marsh Posté le 08-08-2002 à 20:39:10    

chrisbk a écrit a écrit :

 
 
:D
 
G aussi mon quota de connerie a dire :D :O
 
bon, zont fini, ++ :O




 
Ouai, comme le coup du Resume qui couperait le sleep  :sarcastic:  
 
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  :D


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

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é.

Reply

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 ? :??:


---------------
Super.
Reply

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.

Reply

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 ;)


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 09-08-2002 à 14:28:53    

Zion a écrit a écrit :

 
 
Ouai, comme le coup du Resume qui couperait le sleep  :sarcastic:  

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  :D  




 
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....

Reply

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)

Reply

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.


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

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 :D


---------------
Super.
Reply

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 :D




 
 :lol:  
 
Oups, désolé  :(


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

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 :D




 
tu nous as encore pondu un gros sac de noeud, toi :D

Reply

Marsh Posté le 09-08-2002 à 14:56:37    

:D
 
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)


---------------
Super.
Reply

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 :D




 [:super chinois] [:vincent cassel]


---------------
Super.
Reply

Marsh Posté le 09-08-2002 à 14:59:15    

Godbout a écrit a écrit :

:D
 
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 :O :D

Reply

Marsh Posté le 09-08-2002 à 15:03:34    

Et allez encore une connerie :sarcastic: :D


---------------
Super.
Reply

Marsh Posté le 10-08-2002 à 05:53:00    

Pourquoi cela ne marcherait'il pas ?

Code :
  1. BOOL stop= false ;
  2. const DWORD checkmailstime= 30*60*1000 ; //30 minutes
  3. const DWORD checkstoptime =     1*1000 ; // 1 seconde
  4. DWORD WINAPI fThread(LPVOID parg){
  5. for( DWORD t=0 ; !stop ; t+= checkstoptime ){
  6.  if(t>checkmailstime){
  7.   t%= checkmailstime ;
  8.   checkmails() ;
  9.  }
  10.  Sleep(checkstoptime);
  11. }
  12.   return 0;
  13. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

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.


---------------
Super.
Reply

Marsh Posté le 12-08-2002 à 17:24:53    

musaran a écrit a écrit :

Pourquoi cela ne marcherait'il pas ?

Code :
  1. BOOL stop= false ;
  2. const DWORD checkmailstime= 30*60*1000 ; //30 minutes
  3. const DWORD checkstoptime =     1*1000 ; // 1 seconde
  4. DWORD WINAPI fThread(LPVOID parg){
  5. for( DWORD t=0 ; !stop ; t+= checkstoptime ){
  6.  if(t>checkmailstime){
  7.   t%= checkmailstime ;
  8.   checkmails() ;
  9.  }
  10.  Sleep(checkstoptime);
  11. }
  12.   return 0;
  13. }






 
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.


---------------
Le Tyran
Reply

Marsh Posté le 12-08-2002 à 17:25:45    

IL aurait pu mettre un break :o


---------------
Super.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed