Сон в течение миллисекунд

Я знаю, что функция POSIX sleep(x) заставляет программу спать в течение x секунд. Существует ли функция, позволяющая программе спать в течение x миллисекунд на языке C++?

Комментарии к вопросу (4)

В C ++ 11 вы можете сделать это со стандартными библиотечными средствами:

#include 
#include 

& Лт;!- - >

std::this_thread::sleep_for(std::chrono::milliseconds(x));

Четкий и читаемый, больше не нужно догадываться, на каких устройствах работает функция sleep ().

Комментарии (19)
Решение

Заметим, что для миллисекунд не существует стандартного API языка Си, поэтому (на Unix) придется довольствоваться usleep, который принимает микросекунды:

#include 

unsigned int microseconds;
...
usleep(microseconds);
Комментарии (4)

Для сохранения портативности можно использовать Boost::Thread для сна:

#include 

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

_Этот ответ является дубликатом и уже был размещен в этом вопросе. Возможно, вы найдете полезные ответы и там.

Комментарии (1)

В Unix вы можете использовать usleep.

В Windows есть [Сон][2].

[2]: http://msdn.microsoft.com/en-us/library/ms686298 (VS.85).aspx

Комментарии (3)

В зависимости от вашей платформы у вас может быть «usleep» или «nanosleep». usleep устарел и был удален из самого последнего стандарта POSIX; nanosleep предпочтительнее.

Комментарии (1)

Почему бы не использовать библиотеку time.h? Работает в системах Windows и POSIX:


#include 
#include 

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 
Комментарии (5)

nanosleep является лучшим выбором, чем usleep - он более устойчив к прерываниям.

Комментарии (1)
#include 

Синтаксис:

Sleep (  __in DWORD dwMilliseconds   );

Использование:

Sleep (1000); //Sleeps for 1000 ms or 1 sec
Комментарии (4)

При использовании MS Visual C ++ 10.0 вы можете сделать это со стандартными библиотечными средствами:

Concurrency::wait(milliseconds);

вам понадобится:

#include 
Комментарии (1)

Способ спать вашей программы на C ++ - это метод Sleep (int). Файл заголовка для него # include "windows.h.«

Например:


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

int main()
{
    int x = 6000;
    Sleep(x);
    cout 
Комментарии (3)

На платформах с функцией select (POSIX, Linux и Windows) вы можете сделать:

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.
    }
}

Тем не менее, в настоящее время существуют лучшие альтернативы.

Комментарии (2)

Выбор вызова - это способ иметь большую точность (время сна можно указать в наносекундах).

Комментарии (1)

Используйте асинхронные потоки ввода / вывода Boost, спящие в течение x миллисекунд

#include 
#include 

boost::thread::sleep(boost::get_system_time() + boost::posix_time::millisec(1000));
Комментарии (1)

Вопрос старый, но мне удалось найти простой способ получить это в моем приложении. Вы можете создать макрос C / C ++, как показано ниже, используйте его:

#ifndef MACROS_H
#define MACROS_H

#include 

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

#endif // MACROS_H
Комментарии (0)

В качестве замены Win32 для систем POSIX:

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

while (1) {
    printf(".");
    Sleep((unsigned int)(1000.0f/20.0f)); // 20 fps
}
Комментарии (1)