Comment casser l'éxécution d'une boucle en C++ ? - Programmation
Marsh Posté le 06-04-2001 à 18:15:05
koi ??!! ca marche plus le bon vieux break ?? ou c t ptetre exit... hmmm... c le week-end et mon neurone est déjà parti
Marsh Posté le 06-04-2001 à 18:24:16
break, ou un bool qui contrôle
bah le bon vieux goto...
for/while
{
if( tamer )
break; ou goto tchao;
}
tchao: ; /// si goto
peut être utile, mais les profs détestent mdr
c toi qui voit
Marsh Posté le 06-04-2001 à 18:45:13
c'est rien, c'est juste ta condition pour savoir si tu dois sortir de ta boucle !
Marsh Posté le 06-04-2001 à 22:41:59
y'a aussi return c'est un peu viloent comme interruption de boucle mais bon ... (attention, ca arrete aussi la fonction ou se trouve la boucle).
Sinon il y 'a :
char* toto=(char*)NULL;
*toto=0;
Marsh Posté le 06-04-2001 à 22:51:52
tout simplement:
while (!fini)
{
instructions
}
où "fini" est un bool
[edit]--Message édité par End-i--[/edit]
Marsh Posté le 07-04-2001 à 18:09:10
l'instruction last; marche t'elle???
last if(condition);
Marsh Posté le 08-04-2001 à 03:42:41
Cybermds> Non pas en C++. Mais on peut la simuler. En définissant la macro suivante:
#define EXIT_WHEN(condition) if (condition) break
on peut ensuite écrire dans sa boucle:
EXIT_WHEN(ma-condition-de-sortie-est-vérifiée);
Marsh Posté le 08-04-2001 à 10:44:03
Dans le même genre, les boucles Pascaliennes:
#define REPEAT do {
#define UNTIL(cond) } while(!(cond))
Marsh Posté le 09-04-2001 à 10:47:47
j'ai juste un petit probleme : Pour arreter et lancer la boucle, j'ai fait une checkbox mais le probleme est qu'une fois la boucle lancéé, je peux plus décocher la chekbox et donc je peux plus l'arreter!
Marsh Posté le 09-04-2001 à 10:53:45
bah pkoi tu peux plus décocher la checkbox ??? t'as plus accès à l'objet représentant ta checkbox ???
Marsh Posté le 09-04-2001 à 10:57:09
Le goto est particulièrement crade car tu ne dépileras jamais l'adresse d'entrée dans la boucle.
vw
Marsh Posté le 09-04-2001 à 11:41:48
si durant l'éxécution , je la vois toujours mais je clique dessus, ca fait rien !
Marsh Posté le 09-04-2001 à 14:56:58
LMF a écrit a écrit : si durant l'éxécution , je la vois toujours mais je clique dessus, ca fait rien ! |
Ce qui est normal non ?
Je ne comprend pas le Probleme.
Il n'y a qu'un thread, comment prend-t-il en compte la valeur du controle ?
C'est vrai que avec un bout de code ce serait peut-etre plus simple.
Il ne faut pas croire a la magie.
A quoi sert ta boucle ?
Marsh Posté le 09-04-2001 à 16:53:20
voici super résumé mon code ;
int a;
a=0;
while (CheckBox1->Checked==true)
{a=a+1;
Canvas->TextOut(100,10,FloatToStr(a));
// histoire de remplir la boucle, en realité, mon code éffectue un tri mais peut importe, c'est pas de la que vient le probleme.
};
Bilan => une fois lancé on peut plus décocher et donc plus arreter la boucle.
Marsh Posté le 09-04-2001 à 17:10:02
c'est normal, tu prog (et donc le thread principal) reste bloqué dans l'éxécution de ta boucle et il ne peux plus réagir aux actions de l'utilisateur; tes clicks de souris ne pourront être pris en compte que lorsque tu sortira de cette boucle ...
Marsh Posté le 09-04-2001 à 17:20:55
Salut,
tu peux essayer d'ajouter un Sleep(0) (ou équivalent) dans ta boucle, histoire de redonner un peu la main à ton autre thread qui gère les événements du genre clic de souris etc....
Ca produit à peu près le même effet qu'un yield() en java
A++
Marsh Posté le 09-04-2001 à 17:27:05
pour l'avoir essayé, le sleep(0); n'arrange rien; il te faut soit couper ton prog en 2 thread, soit ajouter un bout de code dans ta boucle permettant à ton appli de répondre aux messages (genre click de souris)
ce bout de code ressemble à ceci :
// Read all of the messages in this next loop,
// removing each message as we read it.
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
// Dispatch the message.
DispatchMessage(&msg);
} // End of PeekMessage while loop.
Marsh Posté le 09-04-2001 à 20:22:50
sous delphi tu résous ce problème en insérant dans ta boucle un application.processmessages, sous builder cela doit etre application->processmessages.
Marsh Posté le 06-04-2001 à 18:12:43
Comment casser l'éxécution d'une boucle en C++ (Borland C++ builder 5) ? SVP