2009-11-01 4 views
31

Мне нужна функция, такая как Sleep(time);, которая приостанавливает программу для X миллисекунд, но на C++.Функция сна в C++

Пожалуйста, напишите, какой заголовок добавить и подпись функции. Спасибо!

+6

Это специфичная платформа, поэтому вам понадобится конкретная ОС, или Boost (что сделает предыдущий для вас). – GManNickG

ответ

3
#include "windows.h" 
Sleep(10); 

для UNIX вероятно #include <unistd.h>

только Google это ...

+7

В Windows Sleep() заглавны. В Unix есть usleep() в unistd.h – asveikau

+0

Спасибо за замечание. Я написал это как подсказку. – Dani

5

Там не переносимый способ сделать это.

Портативный способ использования Boost или Ace библиотеки. Существует ACE_OS :: sleep(); в ACE.

+1

... и (предположительная) причина в том, что в стандарте нет портативного способа сделать это, потому что точность часов (наименьшая единица времени) зависит от оборудования или зависит от ОС. Нет, я не считаю это убедительной причиной, но мы здесь. – wilhelmtell

+0

Нет такой вещи, как поток, определенный стандартом ... и вы хотите спать. Сон - это функциональность, предоставляемая ОС. У меня может быть среда, которая не дает мне такой возможности. – alexkr

+0

@wilhelmtell: Это не причина. Кто это делает это предположение, кроме вас самих? Нет стандарта для поддержки потоков (yest), и если нет потоков (или, вернее, только одного потока), нет необходимости в потоке sleep вместо простого «оживленного ожидания», который может быть реализован с помощью /. Поддержка должна предоставляться библиотекой потоков или ОС. – Clifford

9

В UNIX, включают #include <unistd.h> ... ВЫЗОВ МАСТЕРА ваш интересует USleep() ... Который берет микросекунд, так что вы должны умножить ваше значение миллисекунды на 1000 и передать результат в USleep() ...

68

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

std::chrono::milliseconds timespan(111605); // or whatever 

std::this_thread::sleep_for(timespan); 

Существует также бесплатный std::this_thread::sleep_until.

До C++ 11, C++ не имеет концепции потока и не имеет возможности спящего режима, поэтому ваше решение обязательно зависит от платформы. Вот отрывок, который определяет sleep функции для ОС Windows или Unix:

#ifdef _WIN32 
    #include <windows.h> 

    void sleep(unsigned milliseconds) 
    { 
     Sleep(milliseconds); 
    } 
#else 
    #include <unistd.h> 

    void sleep(unsigned milliseconds) 
    { 
     usleep(milliseconds * 1000); // takes microseconds 
    } 
#endif 

Но гораздо проще предварительно C++ 11 метода заключается в использовании boost::this_thread::sleep.

1

Самый простой способ я нашел для C++ 11 был такой:

Ваш включает в себя:

#include <windows.h> 
#include <chrono> 
#include <thread> 

Ваш код (это пример для сна 1000 миллисекунд):

std::chrono::duration<int, std::milli> timespan(1000); 
std::this_thread::sleep_for(timespan); 

Продолжительность может быть настроена на любой из следующих действий:

std::chrono::nanoseconds duration</*signed integer type of at least 64 bits*/, std::nano> 
std::chrono::microseconds duration</*signed integer type of at least 55 bits*/, std::micro> 
std::chrono::milliseconds duration</*signed integer type of at least 45 bits*/, std::milli> 
std::chrono::seconds duration</*signed integer type of at least 35 bits*/> 
std::chrono::minutes duration</*signed integer type of at least 29 bits*/, std::ratio<60>> 
std::chrono::hours duration</*signed integer type of at least 23 bits*/, std::ratio<3600>> 
10

Вы будете нуждаться по крайней мере, C++ 11.

#include <thread> 
#include <chrono> 

... 

std::this_thread::sleep_for(std::chrono::milliseconds(200)); 
Смежные вопросы