簡體   English   中英

使用Windows和C ++ chrono為每個人安排一個事件1ms - 我要求的太多了嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM