2010-07-26 62 views
0

如何获得一个空闲线程再次激活,使其上下文恢复并继续执行(例如,如果我想要一个线程在10秒后激活,然后在每5秒后激活一次,同时其他线程可能会继续运行)?恢复线程的上下文并继续执行?

+1

你需要发布你的线程API。 Boost,WinAPI,pthreads等。 – Puppy 2010-07-26 09:15:11

+0

你也可能想说出你想要达到的目标,因为可能有一个比你所概述的更优雅的解决方案。 – pdbartlett 2010-07-26 09:16:34

回答

1

难道你只是有线程睡眠所需的时间?上下文本质上是线程的一部分,因此会自动恢复。

+0

没有其他方法可以做到吗? – interrupted 2010-07-26 09:16:53

+0

@中断 - 有。例如。你可以使用一个等待定时器并让你的线程等待它。然而,从你的问题来看,它完全不清楚为什么一个简单的睡眠()是不够的。如果你想得到任何有用的答案,你需要更清楚。 – atzz 2010-07-26 09:21:37

0

我怎样才能得到一个空闲的线程再次激活,使其上下文恢复并继续执行(就像我想要一个线程在10秒后激活,然后在每5秒后激活一次时间其他线程可能会继续运行)?

这取决于你的线程模型:你使用的是windows线程吗?提升线程?并行线程? XPCOM线程?别的东西?

在Windows中,您可以挂起线程并再次激活它们。

在升压/并行线程,你必须要么:

  • 启动一个线程每五秒钟,然后让它运行和死亡(五秒钟后再掀)

  • 或者它已经运行并从外部告诉它“你现在处于活动状态”(通过调用定时器上的函数)

  • 或者让它睡五秒钟,然后再处理,然后再次入睡

从我在练习中看到的第二个和第三个选项是最常用的选项。第一个有点浪费,因为创建线程可能有点贵(取决于你的平台)。

你想做什么?

0

根据您使用的线程API,线程之间应发送信号形式以及等待此类信号的方式。

在此基础上,当一个线程完成时,你需要等待一个信号(实际上是睡着了,而不使用任何CPU)。然后一些其他线程可以在某处存储工作项并发出睡眠线程唤醒信号。唤醒的线程检查可用的工作项目,处理该项目,并返回等待下一个项目被发送信号。

这是一种非常简化的方法。 (对于初学者来说,如果下一个工作项目在上一个工作完成之前就已经存储了,该怎么办?)确切的实现取决于您正在使用的API。尝试找到该API的一些消费者生产者场景,这应该给你足够的输入来咀嚼。