web-dev-qa-db-fra.com

Comment faire dormir un programme en C ++ sur Win 32?

Comment "suspendre" un programme en C++ sur Win 32, et quelles bibliothèques doivent être incluses?

19
Chris_45
#include <windows.h>

Sleep(number of milliseconds);

Ou si vous souhaitez suspendre votre programme en attendant un autre programme, utilisez WaitForSingleObject .

26
IVlad

Si vous utilisez boost, vous pouvez utiliser le thread::sleep fonction:

#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 devrez utiliser l'api win32:

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

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

#include <thread>
std::this_thread::sleep_for(chrono::seconds(1));
8
John Gietzen

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

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

Si vous souhaitez que le programme reste réactif pendant une "pause", vous devez utiliser un événement de minuterie.

1
Tronic

Veuillez noter que le code ci-dessus a été testé sur Code :: Blocks 12.11 et Visual Studio 2012
sous Windows 7.

Pour forcer l'arrêt ou l'attente de votre programme, vous avez plusieurs options:


  • sommeil (int non signé)

La valeur doit être un entier positif en millisecondes. Cela signifie que si vous voulez que votre programme attende 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 que le paramètre est en seconde. Alors changez-le comme ça:

sleep(5);

Pour ceux qui reçoivent un message d'erreur ou un problème lors de l'utilisation de sleep, essayez de le remplacer par _sleep ou Sleep, en particulier sur Code :: Bloks.
Et si vous rencontrez toujours des problèmes, essayez d'ajouter une 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 simple programme "Hello world" sur l'application console Windows se fermerait probablement avant que vous puissiez 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: 'le système' n'a pas été déclaré dans cette étendue", ajoutez simplement la ligne suivante au début 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 ()

N'oubliez pas 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 disant d'utiliser _getch () insted de getch

1
borderless

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 des données (en particulier dans un thread qui n'est pas le thread principal). Cela pourrait vous geler GUI. Ce n'est pas seulement une question de dormir pendant une courte période, utilisez des waitmutexes si vous en avez besoin.

0
yan bellavance

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

Une application console peut simplement appeler Sleep. Une application GUI a probablement pas envie de le faire, car tous les menus et 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 une minuterie avec un rappel lorsqu'elle expire.

0
T.E.D.