Функция задержки времени

247
18 апреля 2018, 08:10

Для задержки времени обычно юзаю sleep() из unistd.h, но эта функция принимает в качестве аргумента секунды, а иногда задержку нужно поставить менее 1 секунды. Какой есть аналог этой функции, который принимает значение в милисекундах?

Answer 1

Если вы используете С++11, то в стандартную библиотеку добавлена кроссплатформенная функция std::this_thread::sleep_for для возможности блокировать текущее выполнение потока на заданный промежуток времени.

В качестве промежутка времени передаётся класс std::chrono::duration, который предназначен для задания промежутка времени в различных единицах измерения.

Например,

std::this_thread::sleep_for(std::chrono::nanoseconds(ssec));   
std::this_thread::sleep_for(std::chrono::microseconds(usec));  
std::this_thread::sleep_for(std::chrono::milliseconds(ms));    
std::this_thread::sleep_for(std::chrono::seconds(sec));        
std::this_thread::sleep_for(std::chrono::minutes(min));        
std::this_thread::sleep_for(std::chrono::hours(hrs)); 

Дополнительно: в стандарте С++14 имеются предопределённые пользовательские литералы, которые позволяют задать интервалы времени в различных единицах измерения в более читабельном виде.
Например, если вы хотите установить sleep потоку на 100 миллисекунд, то вместо того, чтобы писать так

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

можно написать так

using namespace std::literals::chrono_literals;
std::this_thread::sleep_for(100ms);    

Эти куски кода эквивалентны, но второй вариант выглядит более читабельным.

Answer 2

Функция usleep(). Задаёт ожидание в микросекундах (1000000 микросекунд = 1 секунда, 1000 микросекунд = 1 милисекунда). Пример:

#include <unistd.h>
const unsigned int microseconds = 683;
int main()
{
    // ...
    usleep(microseconds);
    // ...
    return 0;
}
READ ALSO
Visual Studio компиляция C++ проекта под Linux

Visual Studio компиляция C++ проекта под Linux

Есть C++ проект в Visual Studio 2017, нужно скомпилировать его для дальнейшего запуска на Linux(Ubuntu) какие существуют варианты для реализации?

196
visual studio c++ - не открываются заголовочные файлы

visual studio c++ - не открываются заголовочные файлы

Я не особо разбираюсь в c++, но столкнулся с такой проблемой, что заголовочные файлы из стандартной библиотеки (stdio, conio, winsock2) не открываются

197
создание QtWidget&#39;a как dll

создание QtWidget'a как dll

Здравствуйте

163
ошибка при компиляции проекта С++

ошибка при компиляции проекта С++

во всех проектах с++ visual studio 2017 community при запуске программы появляется такое окно

174