2010-02-12 15 views

Répondre

20
#include <windows.h> 

Sleep(number of milliseconds); 

Ou si vous voulez faire une pause de votre programme en attendant un autre programme, utilisez WaitForSingleObject.

+0

Erreur erreur C3861: 'Sleep': identificateur non trouvé // malgré #include

+0

Pouvez-vous envoyer votre code et quel compilateur utilisez-vous? Cela fonctionne sur ma machine avec GCC: #include int main() { Sommeil (1000); } – IVlad

+0

Ok, vous devez avoir le moderne et ainsi de suite en première ligne et les oldies après ceux-ci, est-ce une règle? Au moins, cela a fonctionné avec cet ordre. –

7

Si vous utilisez coup de pouce, vous pouvez utiliser la fonction thread::sleep:

#include <boost/thread/thread.hpp> 
boost::system_time time = boost::get_system_time(); 
time += boost::posix_time::seconds(1); 
boost::thread::sleep(time); 

Sinon, vous allez devoir utiliser le win32 api:

#include <windows.h> 
Sleep(1000); 

Et, apparemment, C + + 0x comprend ceci:

#include <thread> 
std::this_thread::sleep_for(chrono::seconds(1)); 
+0

Mon dieu, cette dernière ligne est moche. –

+0

@Steve: Mes excuses. –

+1

Je ne vous blâme pas, sauf si vous êtes sur le comité standard C++ ;-) –

1

Si vous souhaitez que le programme reste réactif pendant la "pause", vous ed pour utiliser un événement timer.

+0

effectivement, dans Qt, si vous voulez que votre programme soit réactif alors qu'il est en pause d'un morceau de code qui est exécuté à partir du thread principal, vous ne voulez pas que l'événement de temporisation de votre temporisateur se produise dans le fil principal aussi bien. –

0

Cela dépend du type de programme que vous écrivez.

Une application de console peut simplement appeler sommeil. Une application GUI ne fait probablement pas vouloir faire cela, car tous les menus et les widgets deviendront insensibles, et l'application ne se redessinera pas pendant cette période. Au lieu de cela, vous devez faire quelque chose comme vous mettre en place un minuteur avec un rappel quand il expire.

0

N'utilisez pas de fonction de veille dans votre interface graphique si elle n'est pas fournie par le framework avec lequel vous travaillez. Cela pourrait créer des problèmes de référencement aux données (spécialement dans un thread qui n'est pas le thread principal). Cela pourrait vous geler l'interface graphique. Ce n'est pas seulement une question de sommeil pendant une courte période, utilisez waitmutexes si vous avez besoin de le faire.

0

S'il vous plaît noter que le code ci-dessus a été testé sur Code :: Blocks 12,11 et Visual Studio 2012
sur Windows 7.

Pour forcer votre arrêt du programme ou attendez, vous avez plusieurs options:


  • sommeil (unsigned int)

La valeur doit être un nombre entier positif en millisecondes. Cela signifie que si vous voulez que votre attente de programme pendant 2 secondes, entrez 2000.

Voici un exemple:

#include <iostream>  //for using cout 
#include <stdlib.h>  //for using the function sleep 

using namespace std; //for using cout 

int main(void)   
{ 
    cout << "test" << endl; 
    sleep(5000);   //make the programme waiting for 5 secondes 
    cout << "test" << endl; 
    sleep(2000);   // wait for 2 secondes before closing 

    return 0; 
} 

Si vous attendez trop longtemps, cela signifie probablement le paramètre est en deuxième position. Donc changer comme ça:

sleep(5); 

Pour ceux qui obtiennent un message d'erreur ou d'un problème à l'aide essayer le sommeil de le remplacer par _sleep ou sommeil en particulier sur le Code :: Bloks.
Et si vous rencontrez toujours des problèmes, essayez d'ajouter un de cette bibliothèque sur le biggining du code.

#include <stdio.h> 
#include <time.h> 
#include <unistd.h> 
#include <dos.h> 
#include <windows.h> 

  • système ("PAUSE")

Un programme simple "Bonjour tout le monde" sur les fenêtres application console serait probablement proche avant de pouvoir voir quoi que ce soit. C'est le cas où vous pouvez utiliser le système ("Pause").

#include <iostream>  

using namespace std; 

int main(void)   
{ 
    cout << "Hello world!" << endl; 

    system("PAUSE"); 

    return 0; 
} 

Si vous obtenez le message "erreur: 'système' n'a pas été déclaré dans ce champ" juste ajouter la ligne suivante au biggining du code:

#include <cstdlib> 

  • cin.ignore()

Le même résultat peut être atteint en utilisant cin.ignore():

#include <iostream>  

using namespace std;  

int main(void)   
{ 
    cout << "Hello world!" << endl; 

    cin.ignore(); 

    return 0; 
} 

  • cin.get()

exemple:

#include <iostream>  

using namespace std;  

int main(void)   
{ 
    cout << "Hello world!" << endl; 

    cin.get(); 

    return 0; 
} 

  • getch()

Il suffit de ne pas oublier d'ajouter la bibliothèque conio.h:

#include <iostream>  
#include <conio.h> //for using the function getch() 

using namespace std;  

int main(void) 
{ 

    cout << "Hello world!" << endl; 

    getch(); 

    return 0; 
} 

Vous pouvez avoir un message vous indiquant d'utiliser _getch() insted de getch

1

En C++ 11, vous pouvez le faire avec les fonctions de bibliothèque standard:

#include <chrono> 
#include <thread> 
std::this_thread::sleep_for(std::chrono::milliseconds(x));