Question Dormir pendant des millisecondes


Je connais le POSIX sleep(x) fonction rend le programme en veille pendant x secondes. Y a-t-il une fonction pour faire en sorte que le programme dorme pour x millisecondes en C ++?


455
2017-11-15 12:49


origine


Réponses:


Notez qu'il n'y a pas d'API C standard pour les millisecondes, donc (sous Unix) vous devrez vous contenter usleep, qui accepte les microsecondes:

#include <unistd.h>

unsigned int microseconds;
...
usleep(microseconds);

361
2017-11-15 12:52



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

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

Clair et lisible, plus besoin de deviner quelles sont les unités sleep() fonction prend.


871
2018-05-16 07:11



Pour rester portable, vous pouvez utiliser Boost :: Thread pour dormir:

#include <boost/thread/thread.hpp>

int main()
{
    //waits 2 seconds
    boost::this_thread::sleep( boost::posix_time::seconds(1) );
    boost::this_thread::sleep( boost::posix_time::milliseconds(1000) );

    return 0;
}

Cette réponse est un doublon et a été publiée dans cette question avant. Vous pourriez peut-être y trouver des réponses utilisables.


77
2017-11-15 12:52



Selon votre plate-forme, vous pouvez avoir usleep ou nanosleep disponible. usleep est obsolète et a été supprimé de la norme POSIX la plus récente; nanosleep est préféré.


31
2017-11-15 12:54



Dans Unix, vous pouvez utiliser tu dors.

Dans Windows, il y a Dormir.


29
2017-11-15 12:55



nanosleep est un meilleur choix que usleep - il est plus résilient contre les interruptions.


17
2017-11-15 12:54



Pourquoi ne pas utiliser la bibliothèque time.h? Fonctionne sur les systèmes Windows et POSIX:

#include <iostream>
#include <time.h>

using namespace std;

void sleepcp(int milliseconds);

void sleepcp(int milliseconds) // Cross-platform sleep function
{
    clock_t time_end;
    time_end = clock() + milliseconds * CLOCKS_PER_SEC/1000;
    while (clock() < time_end)
    {
    }
}
int main()
{
    cout << "Hi! At the count to 3, I'll die! :)" << endl;
    sleepcp(3000);
    cout << "urrrrggghhhh!" << endl;
}

Code corrigé - maintenant l'UC reste dans l'état IDLE [2014.05.24]:

#include <iostream>
#ifdef WIN32
    #include <windows.h>
#else
    #include <unistd.h>
#endif // win32

using namespace std;

void sleepcp(int milliseconds);

void sleepcp(int milliseconds) // Cross-platform sleep function
{
    #ifdef WIN32
        Sleep(milliseconds);
    #else
        usleep(milliseconds * 1000);
    #endif // win32
}
int main()
{
    cout << "Hi! At the count to 3, I'll die! :)" << endl;
    sleepcp(3000);
    cout << "urrrrggghhhh!" << endl;
}

17
2018-05-03 23:38



#include <WinBase.h>

Syntaxe: 

Sleep (  __in DWORD dwMilliseconds   );

Usage: 

Sleep (1000); //Sleeps for 1000 ms or 1 sec

9
2018-04-14 13:34



Si vous utilisez MS Visual C ++ 10.0, vous pouvez le faire avec les fonctions de bibliothèque standard:

Concurrency::wait(milliseconds);

Tu auras besoin de:

#include <concrt.h>

6
2018-01-29 18:59



L'appel sélectif est un moyen d'avoir plus de précision (le temps de sommeil peut être spécifié en nanosecondes).


3
2017-11-15 13:17