如何获得一个空闲线程再次激活,使其上下文恢复并继续执行(例如,如果我想要一个线程在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. AJAX继续/恢复中止
- 3. 继续Cassandra恢复测试
- 4. 切换到后台线程并继续执行方法
- 5. 如何保留并稍后恢复线程的执行状态?
- 6. 主线程的执行上下文
- 7. Haskell:继续执行程序
- 8. 继续在主线程上执行任务
- 9. 线程挂起并恢复运行()
- 10. OpenMP运行线程,但继续主线
- 11. 连续执行线程
- 12. 关闭连接并继续执行
- 13. JSON失败并继续执行代码
- 14. 停止并继续执行JavaScript
- 15. 在主线程中执行任务的继续的方法
- 16. 执行器线程在热部署后继续运行
- 17. shell_exec阻止线程无法继续执行下一个窗口中的语句
- 18. 发送回复并继续执行脚本 - PHP
- 19. 发送回复并继续执行Express |任务Node.js
- 20. C#锁定恢复/继续/打破
- 21. 在PHP上继续执行SQL查询
- 22. 多线程 - 添加更多的线程,并继续操作
- 23. 可以使用哪些方法使线程等待事件并继续执行?
- 24. 如何在继续执行之前'刷新'UI线程操作
- 25. pthread_join()是否允许执行调用线程继续?
- 26. 如何在获得异常后继续执行线程
- 27. 主线程在pthread_create()后不会继续执行
- 28. 继续中断的git-push(恢复上传)
- 29. Mercurial - 恢复到旧版本,并从那里继续
- 30. 暂停/停止并继续启动/恢复Java TimerTask?
你需要发布你的线程API。 Boost,WinAPI,pthreads等。 – Puppy 2010-07-26 09:15:11
你也可能想说出你想要达到的目标,因为可能有一个比你所概述的更优雅的解决方案。 – pdbartlett 2010-07-26 09:16:34