Planifier un événement pour tout le monde en utilisant 1ms Windows et C ++ chrono – est-ce que je demande trop?

J’ai du code qui ressemble à ceci:

while(true) { std::chrono::milliseconds NowSinceEpoch = duration_cast(system_clock::now().time_since_epoch()); if((NowSinceEpoch - LastUpdateSinceEpoch >= std::chrono::milliseconds(1) { DoSomething() LastTimeSinceEpoch = duration_cast(std::chrono::system_clock::now().time_since_epoch()); } 

Est-ce un peu trop pour Windows et Chrono? Peut-on vraiment travailler avec de si petites unités de temps? J’ai beaucoup lu sur Windows qui se bat au-delà de 10ms. Toute autre bibliothèque de timer que je pourrais essayer

Merci de votre aide!

Si vous décidez toujours d’attendre au lieu de mettre le thread en veille, ce qui pourrait vous donner une meilleure granularité ( sleep_for garantit uniquement que le thread s’endort au moins le temps imparti), vous devriez plutôt utiliser 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(); } } 

On dirait que vous avez besoin de quelque chose comme ça:

 #include  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); } } 

J’utiliserais plutôt std::thread::sleep_for() .

 while(true) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); DoSomething(); } 

Votre solution consumra 100% du processeur en attendant d’appeler DoSomething() . En appelant sleep_for() vous libérez du temps que le système d’exploitation peut utiliser pour d’autres tâches.