Faire une pause dans l'éxécution d'une boucle en C++ ?

Faire une pause dans l'éxécution d'une boucle en C++ ? - Programmation

Marsh Posté le 09-04-2001 à 10:42:49    

Il existe la commande delay(x) mais le compilateur en veux pas ! (C++ builder 5), une idée ?

Reply

Marsh Posté le 09-04-2001 à 10:42:49   

Reply

Marsh Posté le 09-04-2001 à 11:12:55    

la methode basique, et surtout assez bourrine consiste a effectuer une boucle de 0 a 'tres beaucoup', ou plusieurs boucles imbriquees....
 
a nutiliser quand cas dextreme urgence.

Reply

Marsh Posté le 09-04-2001 à 11:42:05    

et wait ??? (include <sys/wait.h> )  :??:


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 09-04-2001 à 11:42:40    

pardon avait pas lu Borland Builder...


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 09-04-2001 à 11:46:46    

Bien, la methode bas niveau pour cela est la scrutation.
j'explique.
 
tu fais un boucle
while(1)
{
 
...
id = 0;
while(id = 0);
 
....
}
 
 
id passe à 1 par le biais d'une fonction annexe .. (interruption la plupart du tps)...
maintenant, sachant pas ce que tu veux faire ... je sais pas si cette reponse te conviendra !
 
@+

Reply

Marsh Posté le 09-04-2001 à 12:07:52    

j'explique en gors ce que je veux faire :
J'ai une boucle inféfinie que l'on lance avec une checkbox et que l'on doir arreter de la meme facon.
Le probleme vient du fait que je peux pas décocher la checkbox une fois la boucle lancée, je pense donc en faisant une pause, j'aurais le temps de la décocher.

Reply

Marsh Posté le 09-04-2001 à 12:49:02    

void Sleep(DWORD dwMilliseconds);

Reply

Marsh Posté le 09-04-2001 à 13:13:58    

Je suis pas certain que Sleep fonctionnera pour ce que tu veux faire.  Sleep "gèle" le Thread en cours ... donc tu ne sauras pas décocher pendant le Sleep sauf si tu fais un programme multi-threads.
 
Ci-dessous j'ai testé ce que tu veux faire.  Cela fonctionne chez moi mais j'utilise Visual C++ et les MFC pas Borland.
A toi d'adapter :
 
void CTestDlg::OnCheck1()  
{
// Appelé lorsque la case est cochée
UpdateData(TRUE);    // Récupère les infos du contrôle
if (m_bCheck) StartBoucle(); // Teste si coché
}
 
void CTestDlg::StartBoucle()
{
// Boucle infinie (sauf si on décoche la case)
SetTimer(1, 100, NULL);   // Timer pour vérification
m_bFlag = TRUE;     // Flag de contrôle de la boucle
do
{
 // Boucle infinie
 DoEvents();
}
while (m_bFlag);
}
 
void CTestDlg::OnTimer(UINT nIDEvent)  
{
// handler Timer
KillTimer(1);      // Kill Timer
UpdateData(TRUE);     // Récupère les infos du contrôle
if (!m_bCheck) m_bFlag = FALSE;  // On stoppe la boucle
else SetTimer(1, 100, NULL);  // sinon init Timer de nouveau
CDialog::OnTimer(nIDEvent);
}
 
void CTestDlg::DoEvents()
{
// Laisse le système d'exploitation traiter les messages en attente
MSG Msg;
BOOL bRet;
 
if (PeekMessage(&Msg, m_hWnd, 0, 0, PM_NOREMOVE))
{
 if ((bRet = GetMessage(&Msg, m_hWnd, 0, 0)))
  DispatchMessage(&Msg);
}
}
 
PS
m_bCheck est la variable (booléenne) qui se rapporte au contrôle "case à cocher".
 
Voilà j'espère que ca aide.
Flying

Reply

Marsh Posté le 09-04-2001 à 13:16:35    

C'est très très chiant ces smileys dès qu'on écrit du code.
Il serait temps que le forum adopte un système pour mettre le code à part et qu'il apparaisse + lisiblement.
Voir par exemple le cas du forum CodeGuru !!!
On place le code entre [ccode] et [/ccode] et c'est nickel :)
 
Flying

Reply

Marsh Posté le 09-04-2001 à 16:24:43    

Merci de l'aide.
J'ai éssayé avec _sleep(x) =>Fait une pause sans plus.
La méthode de  Flying est assez costaud pour mon niveau.

Reply

Marsh Posté le 09-04-2001 à 16:24:43   

Reply

Marsh Posté le 09-04-2001 à 16:28:32    

Flying a écrit a écrit :

C'est très très chiant ces smileys dès qu'on écrit du code.
Il serait temps que le forum adopte un système pour mettre le code à part et qu'il apparaisse + lisiblement.
Voir par exemple le cas du forum CodeGuru !!!
On place le code entre [ccode] et [/ccode] et c'est nickel :)
 
Flying




 
 
Je suis tout a fiat d'accord avec toi, je pense que la mise en place d'un topic la dessus serait une bonne idée


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Sujets relatifs:

Leave a Replay

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