Chcę wykonać powyższą operację w milisekundach jako jednostkę. Którą bibliotekę i wywołanie funkcji preferuję?Praca w trybie uśpienia w C++, platforma: windows
Ty.
Chcę wykonać powyższą operację w milisekundach jako jednostkę. Którą bibliotekę i wywołanie funkcji preferuję?Praca w trybie uśpienia w C++, platforma: windows
Ty.
program do planowania zadań systemu Windows ma granularność znacznie przekraczającą 1 ms (zazwyczaj 20 ms). możesz to sprawdzić, używając licznika wydajności, aby zmierzyć czas faktycznie spędzony w funkcji Sleep()
. (używanie QueryPerformanceFrequency()
i QueryPerformanceCounter()
pozwala mierzyć czas w dół do nanosekundy). zauważ, że Sleep(0)
powoduje, że wątek jest uśpiony przez możliwie najkrótszy czas.
można jednak zmienić to zachowanie, używając timeBeginPeriod()
i upływając okres 1 ms. teraz Sleep(0)
powinien wrócić znacznie szybciej.
Zauważ, że to wywołanie funkcji zostało stworzone do odtwarzania strumieni multimediów z większą dokładnością. Nigdy nie miałem z tym żadnego problemu, ale potrzeba tak szybkiego okresu jest dość rzadka. w zależności od tego, co próbujesz osiągnąć, mogą istnieć lepsze sposoby na uzyskanie pożądanej dokładności, bez uciekania się do tego "hacka".
Er, funkcja uśpienia() z ap32 win32?
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298%28v=vs.85%29.aspx
Lub jeśli używasz Visual Studio 2010 (lub inny C++ 0x świadomy kompilatora) stosowanie
#include <thread>
#include <chrono>
std::this_thread::sleep();
// or
std::this_thread::sleep_for(std::chrono::milliseconds(10));
przypadku starszych kompilatorów można mieć taką samą wygodę przy użyciu odpowiedniego Boost Libraries
Niewątpliwie największą zaletą jest tutaj przenośność oraz łatwość konwersji opóźnienia pa rameter do jednostek "ludzkich".
To nie zadziała w 2010 roku. VS 2012, tak, ale nie w 2010 roku. – OldPeculier
@OldPeculier Co oznacza, że jest to teraz powszechnie stosowana odpowiedź, lata w dół drogi :) – sehe
Funkcja [Uśpienie] (http://msdn.microsoft.com/en-us/library/ms686298%28VS.85%29.aspx)? – Praetorian
Czy jesteś pewien, że sen jest najlepszym rozwiązaniem? Zwykle tak nie jest. –
Jeśli potrzebujesz spać przez kilka milisekund, zwróć uwagę, że funkcja uśpienia() może mieć rozdzielczość 10 ms lub więcej. –