Мне нужна функция, такая как Sleep(time);
, которая приостанавливает программу для X миллисекунд, но на C++.Функция сна в C++
Пожалуйста, напишите, какой заголовок добавить и подпись функции. Спасибо!
Мне нужна функция, такая как Sleep(time);
, которая приостанавливает программу для X миллисекунд, но на C++.Функция сна в C++
Пожалуйста, напишите, какой заголовок добавить и подпись функции. Спасибо!
Там не переносимый способ сделать это.
Портативный способ использования Boost или Ace библиотеки. Существует ACE_OS :: sleep(); в ACE.
... и (предположительная) причина в том, что в стандарте нет портативного способа сделать это, потому что точность часов (наименьшая единица времени) зависит от оборудования или зависит от ОС. Нет, я не считаю это убедительной причиной, но мы здесь. – wilhelmtell
Нет такой вещи, как поток, определенный стандартом ... и вы хотите спать. Сон - это функциональность, предоставляемая ОС. У меня может быть среда, которая не дает мне такой возможности. – alexkr
@wilhelmtell: Это не причина. Кто это делает это предположение, кроме вас самих? Нет стандарта для поддержки потоков (yest), и если нет потоков (или, вернее, только одного потока), нет необходимости в потоке sleep вместо простого «оживленного ожидания», который может быть реализован с помощью
В UNIX, включают #include <unistd.h>
... ВЫЗОВ МАСТЕРА ваш интересует USleep() ... Который берет микросекунд, так что вы должны умножить ваше значение миллисекунды на 1000 и передать результат в USleep() ...
Использование 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
.
Самый простой способ я нашел для 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>>
Вы будете нуждаться по крайней мере, C++ 11.
#include <thread>
#include <chrono>
...
std::this_thread::sleep_for(std::chrono::milliseconds(200));
Это специфичная платформа, поэтому вам понадобится конкретная ОС, или Boost (что сделает предыдущий для вас). – GManNickG