如何获得一个空闲线程再次激活,使其上下文恢复并继续执行(例如,如果我想要一个线程在10秒后激活,然后在每5秒后激活一次,同时其他线程可能会继续运行)?恢复线程的上下文并继续执行?
回答
难道你只是有线程睡眠所需的时间?上下文本质上是线程的一部分,因此会自动恢复。
没有其他方法可以做到吗? – interrupted 2010-07-26 09:16:53
@中断 - 有。例如。你可以使用一个等待定时器并让你的线程等待它。然而,从你的问题来看,它完全不清楚为什么一个简单的睡眠()是不够的。如果你想得到任何有用的答案,你需要更清楚。 – atzz 2010-07-26 09:21:37
我怎样才能得到一个空闲的线程再次激活,使其上下文恢复并继续执行(就像我想要一个线程在10秒后激活,然后在每5秒后激活一次时间其他线程可能会继续运行)?
这取决于你的线程模型:你使用的是windows线程吗?提升线程?并行线程? XPCOM线程?别的东西?
在Windows中,您可以挂起线程并再次激活它们。
在升压/并行线程,你必须要么:
启动一个线程每五秒钟,然后让它运行和死亡(五秒钟后再掀)
或者它已经运行并从外部告诉它“你现在处于活动状态”(通过调用定时器上的函数)
或者让它睡五秒钟,然后再处理,然后再次入睡
从我在练习中看到的第二个和第三个选项是最常用的选项。第一个有点浪费,因为创建线程可能有点贵(取决于你的平台)。
你想做什么?
根据您使用的线程API,线程之间应发送信号形式以及等待此类信号的方式。
在此基础上,当一个线程完成时,你需要等待一个信号(实际上是睡着了,而不使用任何CPU)。然后一些其他线程可以在某处存储工作项并发出睡眠线程唤醒信号。唤醒的线程检查可用的工作项目,处理该项目,并返回等待下一个项目被发送信号。
这是一种非常简化的方法。 (对于初学者来说,如果下一个工作项目在上一个工作完成之前就已经存储了,该怎么办?)确切的实现取决于您正在使用的API。尝试找到该API的一些消费者生产者场景,这应该给你足够的输入来咀嚼。
- 1. 忽略KeyError并继续执行程序
- 2. 继续Cassandra恢复测试
- 3. AJAX继续/恢复中止
- 4. 切换到后台线程并继续执行方法
- 5. 如何保留并稍后恢复线程的执行状态?
- 6. Haskell:继续执行程序
- 7. 继续执行程序
- 8. 主线程的执行上下文
- 9. 继续在主线程上执行任务
- 10. 线程挂起并恢复运行()
- 11. 如何在等待在同一个线程上执行后继续执行?
- 12. 是否Task.ContinueWith捕获调用线程上下文以便继续?
- 13. OpenMP运行线程,但继续主线
- 14. 连续执行线程
- 15. 在主线程中执行任务的继续的方法
- 16. 执行器线程在热部署后继续运行
- 17. 关闭连接并继续执行
- 18. 停止并继续执行For循环
- 19. 如何处理UnhandledAlertException并继续执行
- 20. JSON失败并继续执行代码
- 21. 线程在关闭应用程序后继续执行
- 22. 当主线程继续执行时,执行两个等待另一个线程的线程
- 23. 应用程序线程继续运行
- 24. shell_exec阻止线程无法继续执行下一个窗口中的语句
- 25. 将继续运行的线程?
- 26. 在Linux中恢复pthread上下文(线程ID)
- 27. 发送回复并继续执行Express |任务Node.js
- 28. 发送回复并继续执行脚本 - PHP
- 29. C#锁定恢复/继续/打破
- 30. 执行批处理文件,并继续运行
你需要发布你的线程API。 Boost,WinAPI,pthreads等。 – Puppy 2010-07-26 09:15:11
你也可能想说出你想要达到的目标,因为可能有一个比你所概述的更优雅的解决方案。 – pdbartlett 2010-07-26 09:16:34