我
不想使用高分辨率时钟的睡眠功能,因为繁忙的睡眠会消耗CPU。
我不想使用条件变量依赖某些事件的唤醒唤醒伪造信号或信号,因为它不能保证周期性。
请建议这些行上是否有可能。我无法在线找到任何解决方案。我需要在线程中实施驱逐策略,该策略将尝试每x秒唤醒一次并清理队列(如果大于特定大小)。
答案 0 :(得分:1)
您正在运行什么操作系统?因为至少在Linux / GCC5.4上,std::this_thread::sleep_for
函数不会等待。例如:
$ cat test.txt
#include <chrono>
#include <thread>
int main(int argc, char** argv)
{
printf("Start\n");
std::this_thread::sleep_for(std::chrono::seconds(5));
printf("Stop\n");
return 0;
}
$ g++ -std=c++14 -o test test.cpp
$ time ./test
Start
Stop
real 0m5.003s
user 0m0.002s
sys 0m0.001s
查看程序如何花费5秒的实时时间,但几乎没有用户(cpu)时间?
关于第二点,没有用户操作系统能够保证周期性,因为它是分时操作系统,并且底层调度程序不能保证进程可运行之后的最大等待时间。为此,您需要查看real-time operating system。但是,对于大多数应用程序,使用condition_variable
等待时,调度程序引入的抖动可能会很好。