我偶然发现了一个引发一些时间关键功能的问题。我的线程必须执行一些操作然后睡眠完全 60ms。由于所需的平台是Windows(语言C ++),我知道它确实存在像这样的时间测量问题,我有一个想法来提高线程睡眠的准确性。
而不是:
void run() {
do_some_action();
sleep(60); // ms
}
我想这样做:
void run() {
do_some_action();
curr_time = get_time_in_nanosec(); // with QueryPerformanceFrequency/QueryPerformanceCounter
while(get_time_in_nanosec() - curr_time < 60000000 /*60ms*/) {}
}
是否值得额外的CPU使用量以及如何衡量性能(是否正确睡眠)?