Спящая операция в C ++, платформа: windows - PullRequest
8 голосов
/ 30 октября 2011

Я хочу выполнить вышеупомянутую операцию в миллисекундах как единицу измерения.Какую библиотеку и вызов функции я должен предпочесть?

Ty.

Ответы [ 4 ]

6 голосов
/ 30 октября 2011

Или, если вы используете Visual Studio 2010 (или другой компилятор с поддержкой c ++ 0x), используйте

#include <thread>
#include <chrono>

std::this_thread::sleep();

// or
std::this_thread::sleep_for(std::chrono::milliseconds(10));

С более старыми компиляторами вы можете иметь то же удобство, используя соответствующие Boost Libraries

Само собой разумеется, главное преимущество здесь - портативность и простота преобразования параметра задержки в «человеческие» единицы.

5 голосов
/ 30 октября 2011

Вы можете использовать функцию Sleep из Win32 API.

2 голосов
/ 30 октября 2011

планировщик задач Windows имеет степень детализации, намного превышающую 1 мс (обычно 20 мс).Вы можете проверить это с помощью счетчика производительности, чтобы измерить время, действительно затраченное на функцию Sleep().(использование QueryPerformanceFrequency() и QueryPerformanceCounter() позволяет измерять время до наносекунды).обратите внимание, что Sleep(0) переводит нить в спящий режим на кратчайший период времени.

однако вы можете изменить это поведение, используя timeBeginPeriod() и передав период 1 мс.теперь Sleep(0) должен возвращаться намного быстрее.

обратите внимание, что этот вызов функции был сделан для воспроизведения потоков мультимедиа с большей точностью.У меня никогда не было проблем с этим, но необходимость в таком быстром периоде встречается довольно редко.в зависимости от того, чего вы пытаетесь достичь, могут быть более эффективные способы получить требуемую точность, не прибегая к этому «хаку».

0 голосов
/ 30 октября 2011
...