在特定时间后唤醒线程

时间:2014-09-30 11:17:56

标签: c++ multithreading pthreads

我有两个主题,比如1和2,并且已经让2个人睡觉了。 1执行某项任务并设置一个计时器,以在任务完成后2秒唤醒。

所以,我需要编程才能在2秒之后发送信号。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

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

pthreads(您指定)只有等到绝对时间。

新的标准C ++库和boost为您提供wait_for(time_period)wait_until(absolute_time)选项。

在你的情况下,我认为你不需要做任何这些,但你可能会使用第三个帖子。

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

  2. 线程1执行任务并立即发出线程2持有的条件变量的信号,但线程2在继续之前休眠。 (所以真的它早点醒来但它模拟了延迟)。不需要第三个线程,但是线程2可能是一个"客户端"线程,你想强制执行延迟,所以如果是这种情况,请使用方法1.

答案 1 :(得分:0)

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

所以,你大致有以下几种情况:

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

我建议最后一个选项。