通知響應執行緒(訊息執行緒)實現

2021-08-19 21:12:28 字數 1043 閱讀 1087

這裡將要實現的是乙個通知響應的執行緒,當我們傳入乙個函式並設定了引數後,執行緒就會收到通知,並去執行這個函式。若沒有傳入任何函式,則該執行緒會始終處於掛起狀態;若連續傳入了多個函式,則所有函式會按照傳入順序在該執行緒中依次執行。

這裡主要涉及的是兩個個問題: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...