it-swarm.com.de

Schlaf für Millisekunden

Ich weiß, dass die Funktion POSIX sleep(x) das Programm für x Sekunden in den Ruhezustand versetzt. Gibt es eine Funktion, die das Programm für x Millisekunden in C++ in den Ruhezustand versetzt?

556

Beachten Sie, dass es für Millisekunden keine Standard-C-API gibt. Daher müssen Sie sich (unter Unix) mit usleep begnügen, das Mikrosekunden akzeptiert:

#include <unistd.h>

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

In C++ 11 können Sie dies mit Standardbibliotheksfunktionen tun:

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

Klar und lesbar, Sie müssen nicht mehr raten, in welchen Einheiten die Funktion sleep() ausgeführt wird.

1114
HighCommander4

Um mobil zu bleiben, können Sie Boost :: Thread zum Schlafen verwenden:

#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;
}

Diese Antwort ist ein Duplikat und wurde bereits in diese Frage veröffentlicht. Vielleicht finden Sie dort auch brauchbare Antworten.

79
MOnsDaR

In Unix können Sie sleep verwenden.

In Windows gibt es Sleep .

31
INS

Abhängig von Ihrer Plattform sind möglicherweise usleep oder nanosleep verfügbar. usleep ist veraltet und wurde aus dem neuesten POSIX-Standard gelöscht. nanosleep wird bevorzugt.

30
CB Bailey

Warum nicht die Bibliothek time.h benutzen? Läuft auf Windows- und POSIX-Systemen:

#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;
}

Korrigierter Code - CPU bleibt jetzt im IDLE-Status [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;
}
18
Bart Grzybicki

nanosleep ist eine bessere Wahl als usleep - es ist widerstandsfähiger gegen Interrupts.

17
Johan Kotlinski
#include <windows.h>

Syntax:

Sleep (  __in DWORD dwMilliseconds   );

Verwendung:

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

Wenn Sie MS Visual C++ 10.0 verwenden, können Sie dies mit Standardbibliotheksfunktionen tun:

Concurrency::wait(milliseconds);

du wirst brauchen:

#include <concrt.h>
7
Metronit

Die Methode, mit der Sie Ihr Programm in C++ in den Ruhezustand versetzen können, ist Sleep(int). Die Header-Datei dafür ist #include "windows.h."

Zum Beispiel:

#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;

int main()
{
    int x = 6000;
    Sleep(x);
    cout << "6 seconds have passed" << endl;
    return 0;
}

Die Ruhezeit wird in Millisekunden gemessen und ist unbegrenzt.

Second = 1000 milliseconds
Minute = 60000 milliseconds
Hour = 3600000 milliseconds
4
Phi

Auf Plattformen mit der Funktion select (POSIX, Linux und Windows) können Sie Folgendes ausführen:

void sleep(unsigned long msec) {
    timeval delay = {msec / 1000, msec % 1000 * 1000};
    int rc = ::select(0, NULL, NULL, NULL, &delay);
    if(-1 == rc) {
        // Handle signals by continuing to sleep or return immediately.
    }
}

Heutzutage gibt es jedoch bessere Alternativen.

4

Verwenden Sie Boost für asynchrone Eingabe-/Ausgabethreads und schlafen Sie für x Millisekunden.

#include <boost/thread.hpp>
#include <boost/asio.hpp>

boost::thread::sleep(boost::get_system_time() + boost::posix_time::millisec(1000));
3
Anum Sheraz

Select Call bietet eine präzisere Möglichkeit (die Ruhezeit kann in Nanosekunden angegeben werden).

3
Madhava Gaikwad

Die Frage ist alt, aber ich habe es geschafft, einen einfachen Weg zu finden, dies in meiner App zu haben. Sie können ein C/C++ - Makro wie unten gezeigt erstellen und verwenden:

#ifndef MACROS_H
#define MACROS_H

#include <unistd.h>

#define msleep(X) usleep(X * 1000)

#endif // MACROS_H
1
Vaibhav Pandey

Als Win32-Ersatz für POSIX-Systeme:

void Sleep(unsigned int milliseconds) {
    usleep(milliseconds * 1000);
}

while (1) {
    printf(".");
    Sleep((unsigned int)(1000.0f/20.0f)); // 20 fps
}
0
lama12345