begin process at 2012 05 30 17:39:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

sortir d'une boucle while infinie avec un bouton


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

sortir d'une boucle while infinie avec un bouton

mercredi 21 juillet 2004 à 20:28:15 | sortir d'une boucle while infinie avec un bouton

bertrandbasch

Bonjour,

En fait je voudrai pouvoir lancer une boucle while à l'aide d'un bouton 1 qui pourrait être stoppé à l'aide d'un bouton stop.
Il me faut cette boucle infinie car ce programme doit être relié à une chaine de production via les ports de l'ordinateur et le tout doit donc ce faire dans un cycle automatique (d'où ma boucle while infinie).
Je me suis reseigné sur les threads mais je vois pas comment dans le deuxième thread on peu accéder à l'évènement du bouton...
Si qqn peut me renseigner ou aurait une autre solution merci de m'aider.

Bertrand
mercredi 21 juillet 2004 à 21:04:48 | Re : sortir d'une boucle while infinie avec un bouton

3psilon

lut

Ne pourrais tu pas faire avec 2 threads :

un qui fait la boucle et un qui commande le demarrage ou l'arret de la boucle ( du thread ) ?

Meme si apparement c de l'indus, ne peux-tu pas utiliser un timer ?

Bye

3psilon
mercredi 21 juillet 2004 à 21:36:04 | Re : sortir d'une boucle while infinie avec un bouton

bertrandbasch

oué ben le deuxième thread c comme ça que je le vois moi aussi. Mais comment je fais pour détecter l'évènement du bouton à partir de ce deuxième thread? Si j'ai cette réponse je peux faire le code.
Merci pour l'aide.

Et sinon, comment tu vois ça avec un timer.

je vous explique vite fait le fct.

C un Système pour faire des mesures(controles)

Automate principale donne l'ordre a mon soft de faire la mesure (via port parallèle)
puis le soft fait une requete rs232 à l'appareil de mesure qui donne ensuite la mesure à mon soft.
fonctionnement en cycle que je veux tout de même pouvoir arrêter quand je le veux.

Bertrand
mercredi 21 juillet 2004 à 23:27:43 | Re : sortir d'une boucle while infinie avec un bouton

3psilon

slt

Je deja répondu mais ca n'as pas été pris en compte :(, alors
je repost :)

je viens de tester et cela fonctionne tu peux tres bien lancer un thread puis l'arreter quand tu le desires.

genre :

DWORD dwThread; // id du thread
HANDLE hThread; // handle du thread

// LA BOUCLE INFINIE
DWORD WINAPI Infinity(LPVOID lpParameter) {
while(true){}
return 0;
}

void Startthread(){
hThread = CreateThread(NULL,0,&Infinity,NULL,NULL,&dwThread);
}
void Stopthread(){
TerminateThread (hThread,0); // 2e param a remplir pour la
} // gestion des erreurs

....
....
..//EVENEMENT CLICK BOUTON
case IDCSTART:
{
Startthread();
break;
}
case IDCSTOP:
{
Stopthread();
break;
}
default:break;
......
...
..

Finalement pas besoin de timer ;)



Bye

3psilon
mercredi 21 juillet 2004 à 23:30:18 | Re : sortir d'une boucle while infinie avec un bouton

BruNews

Administrateur CodeS-SourceS
mets une variable:
int bstop;

avant chaque lancement du thread:
bstop = 0;

dans bouton bstop = 1;
tu verif a chaque tour de boucle bstop dans le thread.

ciao...
BruNews, Admin CS, MVP Visual C++
jeudi 22 juillet 2004 à 08:23:16 | Re : sortir d'une boucle while infinie avec un bouton

bertrandbasch

Tout d´abord merci pour l´aide.
si j´ai bien compris avec ce code on lance et on arrete la boucle infinie avec le meme bouton, c ca?
Je débute en c++....
Sinon j´aimerai qu´on m´éclaire sur IDCSTART et IDCSTOP.
Je vois pas trop d´où ca sort.

mon code ca va ressembler a ca alors?:

bool bstop=true;

DWORD dwThread; // id du thread
HANDLE hThread; // handle du thread

// LA BOUCLE INFINIE
DWORD WINAPI Infinity(LPVOID lpParameter) {
while(bstop){}
return 0;
}

void Startthread(){
hThread = CreateThread(NULL,0,&Infinity,NULL,NULL,&dwThread);
}
void Stopthread(){
TerminateThread (hThread,0); // 2e param a remplir pour la
} // gestion des erreurs

_fastcall void BoutonClick(....){ //je connais plus tro la syntaxe...
case IDCSTART:
{
Startthread();
break;
}
case IDCSTOP:
{
bstop=false;
Stopthread();
break;
}
default:break;
}


Merci si vous pouvez confirmez, j´ai pas BORLAND au boulot pour tester.
jeudi 22 juillet 2004 à 11:06:29 | Re : sortir d'une boucle while infinie avec un bouton

BruNews

Administrateur CodeS-SourceS
TerminateThread ne doit etre employe qu'en cas de blocage, c'est une instruction d'extreme urgence.
Regarde exemples dans les sources publiees, details complets dans Richter:
http://brunews.free.fr/brunews/download/JR4.zip
http://brunews.free.fr/brunews/download/JR4Sources.zip

ciao...
BruNews, Admin CS, MVP Visual C++
jeudi 22 juillet 2004 à 12:01:59 | Re : sortir d'une boucle while infinie avec un bouton

3psilon

Re tlm

En effet, je n'avais pas lu msdn jusqu'au bout ;) dsl

"
TerminateThread is used to cause a thread to exit. When this occurs, the target thread has no chance to execute any user-mode code and its initial stack is not deallocated. DLLs attached to the thread are not notified that the thread is terminating.
"

Mais alors, comment tu ferais brunews ?
Une condition ds le deuxieme thread pour etre sur de sortir de la boucle ou y a t il un autre moyen ?


bertrandbasch>
IDCSTART et IDCSTOP sont juste les noms que j'ai donné aux buttons

Merci


ps: Brunews, J'ai un grand respect pour le travail que tu fournis, felicitations, en plus tes persans sont magnifiques .... bonne continuation ;)



+++

3psilon
jeudi 22 juillet 2004 à 12:11:10 | Re : sortir d'une boucle while infinie avec un bouton

bertrandbasch

---->3psilon

Je vois pas comment ca marchait ton truc alors.

Ce code:

case IDCSTART:
{
Startthread();
break;
}
case IDCSTOP:
{
Stopthread();
break;
}
default:break;


tu le places dans quelle fonction?


sinon je suis dáccord. Impressionant le boulot de Brunews
Je suis a des annees lumieres de ca.

Bon si vous avez une soluce qui soit "propre"...

Bertrand
jeudi 22 juillet 2004 à 12:19:06 | Re : sortir d'une boucle while infinie avec un bouton

BruNews

Administrateur CodeS-SourceS
DWORD dwThread; // id du thread
HANDLE hThread; // handle du thread

case IDCSTART:
{
if(hThread) break; // thread deja en cours
bstop = 0;
Startthread();
break;
}
case IDCSTOP:
{
bstop = 1;
break;
}

Verif bstop dans boucle de ta func thread et sors proprement en retournant une valeur. Avanr sortie, PostMessage un (WM_USER + xxx) a la fenetre qui cree ce thread. A reception de ce message, fenetre ferme hthread (CloseHandle(hThread); hThread = 0;) et autres trucs suivant besoin.

ciao...
BruNews, Admin CS, MVP Visual C++

1 2

Cette discussion est classée dans : bouton, boucle, while, sortir, infinie


Répondre à ce message

Sujets en rapport avec ce message

arret boucle while par clic bouton [ par julienbornet ] Bonjour, je suis entrain de programer une API. Cette api est programmer dans une dialogu box. et je chehce a arreter une boucle while lorsque l'utilis pti pb de thread [ par sena ] Bonjour,j'ai un prog dans lequel je créé un thread.Ce thread tourne en boucle. Dedans j'ai une boucle While(true)Je voudrais savoir comment je pourrai boucle infinie [ par Masshysteria63 ] J'ai un problème de boucle qui tourne indéfiniment lorsque l'untilisateur tape un caractère à la place d'un chiffre avec utilisation d'une boucle cond boucle while [ par oceane67 ] bonjour, j'ai un probleme avec une boucle while, le code est simple mais je trouve pas le probleme:i=0; j=0; cout cin>>rep; do { if (strcm boucle infinie, plantage du prog [ par windowsfashion ] bonjour Je suis debutant en c++  Quand je demande un nombre (avec cin) et que l'on met à la place des caracteres au lieu d'un nombre, ba sa me fait sortir d'une boucle [ par adeteine ] Salut, J'ecris un petit logiciel de compte à rebours spécifique avec un bouton start et un bouton stop sur visual c++ 6.0. En cliquant sur start, mon bouton stop [ par rlope ] BonjourJ'ai un petit problème avec un bouton STOP que je voudrais créer. (Visual C++ boite de dialogue)Explication :Avec un bouton de ma boite de dial linux [ par rawen ] svp vou pouvez m'aider de faire un mini compilateur en langage lex/yacc pour qu'il puisse faire compiler 3 boucles en langage C -la boucle for -la bou boucle do while et timer [ par gogeta2003 ] Salut, je doit récupérer une valeur que je lis sur une carte E/S, et j'attend dans une boucle infini pour passer au cycle suivant tant que je n'ai pas boucle infinie,enfin presque... [ par booth ] bonjour, je suis semi newbie en C++, et je viens de faire un prog avec des sockets...le truc c'est que je suis obligé d'utiliser une boucle ainfinie p


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,792 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales