bertrandbasch
Messages postés22Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention12 août 2004
-
21 juil. 2004 à 20:28
bertrandbasch
Messages postés22Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention12 août 2004
-
22 juil. 2004 à 13:36
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.
bertrandbasch
Messages postés22Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention12 août 2004 21 juil. 2004 à 21:36
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.
void Startthread(){
hThread = CreateThread(NULL,0,&Infinity,NULL,NULL,&dwThread);
}
void Stopthread(){
TerminateThread (hThread,0); // 2e param a remplir pour la
} // gestion des erreurs
bertrandbasch
Messages postés22Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention12 août 2004 22 juil. 2004 à 08:23
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
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.
3psilon
Messages postés76Date d'inscriptionlundi 19 juillet 2004StatutMembreDernière intervention17 janvier 2005 22 juil. 2004 à 12:01
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 ;)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 22 juil. 2004 à 12:19
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.
bertrandbasch
Messages postés22Date d'inscriptionlundi 12 mai 2003StatutMembreDernière intervention12 août 2004 22 juil. 2004 à 13:36
ok merci.
Je crois avoir compris le principe. C deja ca. A moi de me debrouiller maintenant.
Si ca marche, je posterai le code final en Borland pour les personnes que ca interessera.