如何獲得一個空閒線程再次激活,使其上下文恢復並繼續執行(例如,如果我想要一個線程在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