问题
我正在尝试使用一种简单的可移植方式为线程执行可中断的睡眠。我的另一个要求是关于SIGSTOP / SIGCONT的使用,如果程序被暂停,则等待必须在不考虑暂停的情况下执行。示例:我正在等待5秒钟,在暂停程序1秒钟后,在恢复1分钟1分之后,等待应再次运行,等待4秒钟。
我的analisys
std::condition_variable::wait_for()
和std::condition_variable::wait_until()
方法仅从gcc 10和glibc 2.6 bugzilla开始使用单音时间。在以前的版本或没有平台支持的地方,即pthread_cond_clockwait()
不可用,将使用系统时钟。但是,如果通过人工或自动(例如NTP)更改系统时钟,则使用系统时钟可能会产生超时等过早或过晚的副作用。另外,如果我们通过wait_for()
停止进程,则wait_until()
和SIGSTOP
可能触发得太早,因为系统时钟或稳定时钟被重新评估,并且由于整个时间都在运行,但是我们的过程冻结,当我们使用SIGCONT
重新开始该过程时,每次等待都会触发。
可能的解决方案
即使在较旧的平台上,似乎也只有一种可靠的睡眠方式可以调用select
系统调用。另外,选择行为可以满足我的要求,例如可以使用自管技巧将其中断。
问题
我的分析正确吗?我想念什么吗?