這裡將要實現的是乙個通知響應的執行緒,當我們傳入乙個函式並設定了引數後,執行緒就會收到通知,並去執行這個函式。若沒有傳入任何函式,則該執行緒會始終處於掛起狀態;若連續傳入了多個函式,則所有函式會按照傳入順序在該執行緒中依次執行。
這裡主要涉及的是兩個個問題:1.執行緒同步;2.函式和引數的儲存和傳遞。
1.建立乙個執行緒,迴圈讀取訊號量佇列queue_semaphore中的資料,當佇列中的值為空時,執行緒阻塞,收到訊號量時繼續執行。
3.每次傳入乙個函式,就往queue_semaphore隊尾壓入乙個函式引數對。
先看一下頭檔案的定義,其實就已經很清晰了,這裡queue_semaphorem_queue_semaphore;中的parameters包含了函式和函式的引數。
#include #include #include #include "semaphore.h"
#include "parameters.h"
typedef std::functionxfunction;
class msgthr
;
接下來是函式的實現
void func_empty(parameters){}
#define empty_func xfunction(func_empty)
#define empty_args parameters({})
msgthr::msgthr()
delete pthis;
pthis = nullptr;
}, this);
t.detach();
}msgthr::~msgthr()
void msgthr::run(const xfunction &f, const parameters &a, bool e));}
}void msgthr::exit()
這裡通過m_exit值來退出執行緒,並傳遞乙個空的函式和引數來觸發執行緒。
在使用時需要注意一點,msgthr通過new建立指標來建立物件,但在exit後無需手動delete。
C 多執行緒 6 執行緒通知
目錄回顧一下,前面 lock monitor 部分我們學習了執行緒鎖,mutex 部分學習了程序同步,semaphor 部分學習了資源池限制。這一篇將學習 c 中用於傳送執行緒通知的 autorestevent 類。用於從乙個執行緒向另乙個執行緒傳送通知。微軟文件是這樣介紹的 表示執行緒同步事件在乙...
執行緒通知與等待
當乙個執行緒呼叫乙個共享變數的 wait 方法時,該呼叫執行緒會被阻塞掛起,直到發生下面幾件事情之一才返回。其他執行緒呼叫了該共享物件的 notify 或者 notify 方法 其他執行緒呼叫了該執行緒的 interrupt 方法,該執行緒丟擲 interruptedexception 異常返回。注...
執行緒通知與等待
乙個執行緒呼叫乙個共享變數的wait 方法時,該執行緒會被阻塞掛起。呼叫wait的前提是該執行緒有獲取共享變數的監視器鎖。獲取監視器鎖 1 synchronize 共享變數 2 在在共享變數的方法前加synchronize關鍵字,呼叫該方法。若執行緒沒有獲取監視器鎖而呼叫了wait 則會丟擲ille...