多執行緒封裝

2021-06-27 22:39:25 字數 784 閱讀 1169

每個成員函式(除了在第 12.6 節介紹的 static 成員函式外)都有乙個額外的、隱含的形參 this。

為了理解成員函式的呼叫,可考慮下面的語句:

total.same_isbn(trans);

就如編譯器這樣重寫這個函式呼叫,this指標被傳入成員函式:

sales_item::same_isbn(&total, trans);

所以在進行多執行緒程式設計的時候遇到了乙個編譯問題:argument of type 『void* (test::)(void*)』 does not match 『void* (*)(void*)』

後來發現將執行緒處理函式宣告為static型別,問題得解。

其實這個原因很簡單,當把執行緒函式封裝在類中,this指標會作為預設的引數被傳進函式中,從而和執行緒函式引數(void*)不能匹配,不能通過編譯。

另一種理解

類的靜態函式不屬於該類的任何乙個物件,而是屬於類本身,所以不受物件區域性變數的影響,在執行時可以直接呼叫類的靜態函式,從而啟動執行緒!

相反,如果乙個類的乙個區域性物件的生命週期結束了,難道執行緒函式就不能用了嗎?

#include#include using namespace std;

class test

;test::test()

test::~test()

void test::dopthread()

void *test::createpthread(void *ptr)

int main()

多執行緒程式設計之執行緒的封裝

前人總結出,乙個執行緒安全的class應當滿足的條件 1.從多個執行緒訪問時,其表現出正確的行為,無論作業系統如何排程這些執行緒,無論這些執行緒的執行順序如何交織。2.呼叫端 無需額外的同步或其他協調動作 在寫多執行緒程式時腦子裡要有這樣的意識,下面我總結了幾條比較具體的注意事項。使用多執行緒要考慮...

多執行緒程式設計之執行緒的封裝

前人總結出,乙個執行緒安全的class應當滿足的條件 1.從多個執行緒訪問時,其表現出正確的行為,無論作業系統如何排程這些執行緒,無論這些執行緒的執行順序如何交織。2.呼叫端 無需額外的同步或其他協調動作 在寫多執行緒程式時腦子裡要有這樣的意識,下面我總結了幾條比較具體的注意事項。使用多執行緒要考慮...

語言多執行緒封裝執行緒啟動返回邏輯

封裝多執行緒模組 執行緒啟動 返回值 邏輯 1 執行緒 啟動 邏輯 2 shcreatethread 易語言shcreatethread shcreatethread function microsoft docs 511遇見易語言多執行緒大漠多執行緒 shcreatethread 版本 2 引數 ...