C 多執行緒學習 四 多執行緒的自動管理 執行緒池

2021-09-30 04:59:02 字數 929 閱讀 6489

在多執行緒的程式中,經常會出現兩種情況:

一種情況: 應用程式中,執行緒把大部分的時間花費在等待狀態,等待某個事件發生,然後才能給予響應

這一般使用threadpool(執行緒池)來解決;

另一種情況:執行緒平時都處於休眠狀態,只是周期性地被喚醒 這一般使用timer(定時器)來解決;

//將乙個執行緒放進執行緒池,該執行緒的start()方法將呼叫waitcallback**物件代表的函式

public static bool queueuserworkitem(waitcallback);

//過載的方法如下,引數object將傳遞給waitcallback所代表的方法

public static bool queueuserworkitem(waitcallback, object); t

threadpool 的用法:

首先程式建立了乙個manualresetevent物件,該物件就像乙個訊號燈,可以利用它的訊號來通知其它執行緒。 本例中,當執行緒池中所有執行緒工作都完成以後,manualresetevent物件將被設定為有訊號,從而通知主線程繼續執行。

manualresetevent物件有幾個重要的方法:

初始化該物件時,使用者可以指定其預設的狀態(有訊號/無訊號); 在初始化以後,該物件將保持原來的狀態不變,直到它的reset()或者set()方法被呼叫: reset()方法:將其設定為無訊號狀態; set()方法:將其設定為有訊號狀態。 waitone()方法:使當前執行緒掛起,直到manualresetevent物件處於有訊號狀態,此時該執行緒將被啟用。然後,程式將向執行緒池中新增工作項,這些以函式形式提供的工作項被系統用來初始化自動建立的執行緒。當所有的執行緒都執行完了以後,manualresetevent.set()方法被呼叫,因為呼叫了manualresetevent.waitone()方法而處在等待狀態的主線程將接收到這個訊號,於是它接著往下執行,完成後邊的工作。

C 多執行緒學習 四 多執行緒的自動管理 執行緒池

在多執行緒的程式中,經常會出現兩種情況 一種情況 應用程式中,執行緒把大部分的時間花費在等待狀態,等待某個事件發生,然後才能給予響應 這一般使用threadpool 執行緒池 來解決 另一種情況 執行緒平時都處於休眠狀態,只是周期性地被喚醒 這一般使用timer 定時器 來解決 threadpool...

C 多執行緒學習 四 多執行緒的自動管理 執行緒池

在多執行緒的程式中,經常會出現兩種情況 一種情況 應用程式中,執行緒把大部分的時間花費在等待狀態,等待某個事件發生,然後才能給予響應 這一般使用threadpool 執行緒池 來解決 另一種情況 執行緒平時都處於休眠狀態,只是周期性地被喚醒 這一般使用timer 定時器 來解決 threadpool...

C 多執行緒學習 四 多執行緒的自動管理 執行緒池

在多執行緒的程式中,經常會出現兩種情況 一種情況 應用程式中,執行緒把大部分的時間花費在等待狀態,等待某個事件發生,然後才能給予響應 這一般使用threadpool 執行緒池 來解決 另一種情況 執行緒平時都處於休眠狀態,只是周期性地被喚醒 這一般使用timer 定時器 來解決 threadpool...