C++ 在特定时间后唤醒线程

C++ 在特定时间后唤醒线程,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我有两条线,比如说1和2,已经让2进入睡眠状态。1执行某些任务并设置计时器,使其在任务完成后2“t”秒唤醒 所以,我需要编程在2't'秒后发送信号。如何实现这一点?在C++11之前,标准库不提供计时器。即使使用C++11,您也有标准的计时工具(例如,睡眠、条件变量等),但您必须将它们组合起来以获得所需的行为 因此,您大致有以下注意事项: 依赖某些特定的(跨平台)库(例如,Qt、Boost等) 依赖操作系统级设施(例如Linux上的Posix) 创建第三个线程作为计时器:一旦激活,它将休眠2秒,

我有两条线,比如说1和2,已经让2进入睡眠状态。1执行某些任务并设置计时器,使其在任务完成后2“t”秒唤醒


所以,我需要编程在2't'秒后发送信号。如何实现这一点?

在C++11之前,标准库不提供计时器。即使使用C++11,您也有标准的计时工具(例如,睡眠、条件变量等),但您必须将它们组合起来以获得所需的行为

因此,您大致有以下注意事项:

  • 依赖某些特定的(跨平台)库(例如,Qt、Boost等)
  • 依赖操作系统级设施(例如Linux上的Posix)
  • 创建第三个线程作为计时器:一旦激活,它将休眠2秒,然后通过条件变量向第二个线程发送信号
  • 让第一个线程计算完成工作后等待的时间量,使其休眠,然后通过条件变量向另一个线程发送信号

我建议最后一个选项。

您可以对条件变量使用定时等待,该变量将在达到/已过该时间时唤醒。你也可以让一个线程睡眠一段时间

pthreads(您指定的)只等待到绝对时间

<新标准C++库和Boost给您选择了<代码> WaITy(Time-Type期)< /C> >或 Waisti直到(绝对时间)

在你的情况下,我认为你不需要做这些,但你可以使用第三个线程

  • 线程1执行任务,线程2等待一个条件变量,当线程1完成任务时,它创建一个第三个线程,该线程睡眠并唤醒线程2

  • 线程1执行该任务并立即向线程2持有的条件变量发送信号,但是线程2在继续之前会休眠。(实际上,它醒得更早,但它模拟了延迟)。不需要第三个线程,但是线程2可能是一个“客户端”线程,您希望强制执行延迟,因此如果是这种情况,请使用方法1


  • 使用条件变量。您使用的是什么框架?为什么不在任务完成后立即将信号发送到线程2,并让该线程在对信号做出反应之前等待't'秒?需要't'秒的等待。另外,线程1直到2次唤醒(在't'秒之后)才存在。
    需要't'秒等待。
    好的,我建议您在线程2中进行等待。在这种情况下,您需要在线程1中等待或创建第三个线程。我不明白你为什么不能在线程2中等待。标准库中有计时器,用于让线程睡眠、等待互斥体、等待条件变量和等待未来。我不明白最后一个选项,你能详细说明一下吗?-比如,在第一个线程睡觉后,你如何给第二个线程发信号?我想设置一个计时器,从第一个线程发送信号。如果任务完成后线程2立即被唤醒,然后在超时的情况下使自己重新进入睡眠状态,那么您可以取消第三个线程。是的,这是方法2,但如果线程2由客户端持有,并且您想强制他们获得延迟,则您将使用方法1。哦,是的,因此。。。答案是经过编辑的还是我没有读到最后?!:-)我很快编辑了答案,但你的评论是在我编辑之后,所以我猜你看起来不太对劲