C++ 在特定时间后唤醒线程
我有两条线,比如说1和2,已经让2进入睡眠状态。1执行某些任务并设置计时器,使其在任务完成后2“t”秒唤醒C++ 在特定时间后唤醒线程,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我有两条线,比如说1和2,已经让2进入睡眠状态。1执行某些任务并设置计时器,使其在任务完成后2“t”秒唤醒 所以,我需要编程在2't'秒后发送信号。如何实现这一点?在C++11之前,标准库不提供计时器。即使使用C++11,您也有标准的计时工具(例如,睡眠、条件变量等),但您必须将它们组合起来以获得所需的行为 因此,您大致有以下注意事项: 依赖某些特定的(跨平台)库(例如,Qt、Boost等) 依赖操作系统级设施(例如Linux上的Posix) 创建第三个线程作为计时器:一旦激活,它将休眠2秒,
所以,我需要编程在2't'秒后发送信号。如何实现这一点?在C++11之前,标准库不提供计时器。即使使用C++11,您也有标准的计时工具(例如,睡眠、条件变量等),但您必须将它们组合起来以获得所需的行为 因此,您大致有以下注意事项:
- 依赖某些特定的(跨平台)库(例如,Qt、Boost等)
- 依赖操作系统级设施(例如Linux上的Posix)
- 创建第三个线程作为计时器:一旦激活,它将休眠2秒,然后通过条件变量向第二个线程发送信号
- 让第一个线程计算完成工作后等待的时间量,使其休眠,然后通过条件变量向另一个线程发送信号
我建议最后一个选项。您可以对条件变量使用定时等待,该变量将在达到/已过该时间时唤醒。你也可以让一个线程睡眠一段时间 pthreads(您指定的)只等待到绝对时间 <新标准C++库和Boost给您选择了<代码> WaITy(Time-Type期)< /C> >或
使用条件变量。您使用的是什么框架?为什么不在任务完成后立即将信号发送到线程2,并让该线程在对信号做出反应之前等待't'秒?需要't'秒的等待。另外,线程1直到2次唤醒(在't'秒之后)才存在。
需要't'秒等待。
好的,我建议您在线程2中进行等待。在这种情况下,您需要在线程1中等待或创建第三个线程。我不明白你为什么不能在线程2中等待。标准库中有计时器,用于让线程睡眠、等待互斥体、等待条件变量和等待未来。我不明白最后一个选项,你能详细说明一下吗?-比如,在第一个线程睡觉后,你如何给第二个线程发信号?我想设置一个计时器,从第一个线程发送信号。如果任务完成后线程2立即被唤醒,然后在超时的情况下使自己重新进入睡眠状态,那么您可以取消第三个线程。是的,这是方法2,但如果线程2由客户端持有,并且您想强制他们获得延迟,则您将使用方法1。哦,是的,因此。。。答案是经过编辑的还是我没有读到最后?!:-)我很快编辑了答案,但你的评论是在我编辑之后,所以我猜你看起来不太对劲