如何在一段时间内停止pthread_t?我的意思是没有使用睡眠功能;)
答案 0 :(得分:1)
如果你的线程实现库支持它,你可以使用主线程中的pthread_suspend
和pthread_continue
或者使用任何类型的“休眠时间计数”来使用{{1}}。
请参阅有关正常用途的手册页。
答案 1 :(得分:1)
使用pthread_cond_wait
(或pthread_cond_timedwait
,但可能不会)阻止该线程。你需要一个谓词 - 一个变量,它保存一个值,指示线程是应该去还是停止。而且你需要一个互斥锁来保护谓词和条件变量。然后,另一个线程可以通过获取互斥锁,更改谓词,发出条件变量信号并释放互斥锁来解锁线程。
但是,一般来说,你不应该这样做。如果有事可做,你应该让线程去做。如果无事可做,则应将线程编码为终止或等待工作。如果您必须使用特定代码强制执行此操作,则可能是您首先出错了。
应该对线程进行编码以完成所有操作,并且只编写您希望它执行的操作。除了真正不常见的情况外,你不应该从外面“推它”。
答案 2 :(得分:0)
你可以等待线程句柄本身超时...一旦线程终止,就会发出一个线程句柄信号,因此它会在运行时超时。
答案 3 :(得分:0)
你的问题很不明确。有一些可能的方法,但这取决于你想要实现的目标。 你想打断线程吗?你想要一个点,线程'阻止'执行,直到满足某个标准? 谁应该能够阻止你的线程?谁应该能够重新开始运作?
一些可能性包括:
线程暂停:pthread_suspend
同步:mutexes,semaphores,spinlock,pause / alarm
...
答案 4 :(得分:-1)
海,
它需要多精确?第一个线程停止后,您可以考虑启动另一个线程。这个“新”线程运行一段特定时间,然后重新启动第一个线程。 如果只需要一次停止,您可以添加一个计数器。
如果您反复需要这一切,您还可以考虑周期性时间触发的pthread。
此致 -G。