[英]Scheduling an event for everyone 1ms using Windows and C++ chrono - am I asking for too much?
我有一些代碼是這樣的:
while(true)
{
std::chrono::milliseconds NowSinceEpoch = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
if((NowSinceEpoch - LastUpdateSinceEpoch >= std::chrono::milliseconds(1)
{
DoSomething()
LastTimeSinceEpoch = duration_cast<milliseconds>(std::chrono::system_clock::now().time_since_epoch());
}
對於Windows和Chrono來說,這有點太過分嗎? 它真的可以用這么小的時間單位嗎? 我已經閱讀了很多關於Windows奮斗超過10毫秒的內容。 我可以嘗試的任何其他計時器庫
謝謝你的幫助!
聽起來你需要這樣的東西:
#include <chrono>
int main()
{
using namespace std::chrono;
using clock = steady_clock;
auto time_up = clock::now() + milliseconds(1);
while(true)
{
std::this_thread::sleep_until(time_up);
// emit event
// set time_point for next millisecond
time_up += milliseconds(1);
}
}
我會使用std::thread::sleep_for()
代替。
while(true)
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));
DoSomething();
}
在等待調用DoSomething()
時,您的解決方案將消耗100%的CPU。 通過調用sleep_for()
您可以騰出操作系統可用於其他任務的時間。
如果你仍然決定自旋等待,而不是睡覺的線程,這可能會給你更好的粒度( sleep_for
只保證線程會睡眠至少給定的時間),你應該使用high_resolution_clock
代替。
while(true)
{
auto lastDoSomethingTime = high_resolution_clock::now();
if((high_resolution_clock::now() - lastDoSomethingTime) >= milliseconds(1))
{
DoSomething()
lastDoSomethingTime = high_resolution_clock::now();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.