訊息機制無處不在

2021-03-31 08:56:29 字數 1280 閱讀 2791

windows

下的多執行緒分為兩個分支即

gui thread

和worker thread

其實gui

在嚴格的意義上說是多執行緒的一種特例骨子裡還流著單執行緒的血。微軟提供了

afxbeginthread

建立兩種執行緒。使用

afxbeginthread

建立gui thread

時候windows

給此執行緒建立了乙個隱含的視窗,既然是視窗訊息迴圈機制當然不能少。視窗不停的從訊息佇列中取出訊息,並對訊息進行處理。我們可以通過訊息的傳送實現執行緒之間的通訊。當

afxbeginthread

建立worker thread

的時候就不存在什麼隱含的視窗和訊息機制。執行緒間的通訊也只能通過

afxbeginthread

中傳遞的函式來實現。有意思的是不論要傳遞的引數是存放在棧中還是堆中

afxbeginthread

都能把引數傳給之前使用者指定的執行緒函式中。但是作為多執行緒程式設計的發燒友我就像讓

worker thread

中存在訊息傳遞機制以便讓執行緒之間的通訊更豐富些。

下面我們就來一起**如何實現這個問題。既然是訊息就應該定義訊息

id這樣

worker thread

才能辨別出哪個訊息是做什麼的。和在

gui thread

自定義訊息不同在

worker thread

在中應以如下方法自定義訊息:

現在訊息

id有了還有兩個問題是如何在主線程傳送(不要被主線程迷惑其實你可以在任何子執行緒中向另乙個執行緒傳送訊息)以及如何在

worker thread

中接收。傳送麼當然要用

postthreadmessag

不過首先要得到

worker thread

執行緒的id

這當然沒問題,我們創造了它當然對它的一切瞭如指掌。在

worker thread

接受訊息的函式是經典的

getmessage();

好了萬事具備了。

handle g_hevent=null;

dword winapi workerthread(lpvoid pparam); /

void cwokerthreadinmessagedlg::createworkerthread()

dword winapi workerthread(lpvoid pparam)

}

return 0;

}

系統無處不在

本書最大的啟示 西方的科學通常是一種不斷的從大到小範圍內進行不停的劃分,當把問題劃分到足夠小的時候就可以解決。但是本書是一種逆向的方式,以整體化和系統化的方式看待問題,尤其是將問題還原到系統中的觀點極其的獨特,有非常高的借鑑意義。系統化思維在自然和社會的方方面面都在發揮著重要的作用。我們在看待某個問...

數學無處不在

數學無處不在 基本資訊 叢書名 數學與人文 出版社 高等教育出版社 isbn 9787040345346 出版日期 2012 年5月 開本 16開 頁碼 1 版次 1 1 所屬分類 數學 更多關於 數學無處不在 內容簡介 數學書籍 本著叢書 讓數學成為國人文化的一部分 的宗旨,我們在本輯向讀者展示 ...

Cache無處不在

本文屬於備忘錄形式的,記錄了最近的一些收穫。在web世界裡,cache是無所不在的。客戶端的瀏覽器會針對訪問的網頁自動的快取一部分的靜態檔案,從而增加瀏覽的速度,這就是我們為什麼會在瀏覽器的臨時資料夾中發現大量莫名其妙檔案的理由。另外isp為了增加使用者的訪問速度,也會在中轉的伺服器中提供大量的快取...