C ++ pthread_t - 如何在一段时间内停止pthread_t

时间:2011-12-14 08:01:25

标签: c++ timer pthreads

如何在一段时间内停止pthread_t?我的意思是没有使用睡眠功能;)

5 个答案:

答案 0 :(得分:1)

如果你的线程实现库支持它,你可以使用主线程中的pthread_suspendpthread_continue或者使用任何类型的“休眠时间计数”来使用{{1}}。

请参阅有关正常用途的手册页。

答案 1 :(得分:1)

使用pthread_cond_wait(或pthread_cond_timedwait,但可能不会)阻止该线程。你需要一个谓词 - 一个变量,它保存一个值,指示线程是应该去还是停止。而且你需要一个互斥锁来保护谓词和条件变量。然后,另一个线程可以通过获取互斥锁,更改谓词,发出条件变量信号并释放互斥锁来解锁线程。

但是,一般来说,你不应该这样做。如果有事可做,你应该让线程去做。如果无事可做,则应将线程编码为终止或等待工作。如果您必须使用特定代码强制执行此操作,则可能是您首先出错了。

应该对线程进行编码以完成所有操作,并且只编写您希望它执行的操作。除了真正不常见的情况外,你不应该从外面“推它”。

答案 2 :(得分:0)

你可以等待线程句柄本身超时...一旦线程终止,就会发出一个线程句柄信号,因此它会在运行时超时。

答案 3 :(得分:0)

你的问题很不明确。有一些可能的方法,但这取决于你想要实现的目标。 你想打断线程吗?你想要一个点,线程'阻止'执行,直到满足某个标准? 谁应该能够阻止你的线程?谁应该能够重新开始运作?

一些可能性包括:

答案 4 :(得分:-1)

海,

它需要多精确?第一个线程停止后,您可以考虑启动另一个线程。这个“新”线程运行一段特定时间,然后重新启动第一个线程。 如果只需要一次停止,您可以添加一个计数器。

如果您反复需要这一切,您还可以考虑周期性时间触发的pthread。

此致 -G。