2010-07-26 42 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的一些消費者生產者場景,這應該給你足夠的輸入來咀嚼。