MFC中線程間通訊 主線程與子執行緒間的通訊

2021-09-02 05:25:53 字數 1066 閱讀 6669

第0步:宣告乙個執行緒、乙個事件

cwinthread* m_hthread;				//接收執行緒的控制代碼

handle hstarteven; //

第一步:定義自己的訊息

#define my_message wm_user+100
第二步:在傳送訊息的執行緒中

//得到需要傳輸的資料

cstring str;

getdlgitemtextw(idc_offset_v,str);

//將傳輸的資料轉化成char*

char *ch = new char[10];

widechartomultibyte(cp_acp,0,str,-1,ch,10,null,null);

//建立event物件,讓postthreadmessage等待目標執行緒建立乙個訊息佇列

hstarteven = ::createeventa(0,false,false,0);

if (hstarteven == 0)

if(m_hthread == 0)

//不斷呼叫postthreadmessage函式,直到函式成功。 這是因為當執行緒收到這樣的函式以後,

//會自動建立訊息佇列。

while(!m_hthread->postthreadmessage(um_message,(wparam)ch,0))

第三部:在接收訊息的執行緒中

msg msg;

//目標執行緒通過呼叫peekmessage強制系統建立乙個訊息佇列

peekmessage(&msg,null,wm_user+100,wm_user+100,pm_noremove);

//判斷是否有訊息傳遞過來

if (!setevent(hstarteven))

//如果傳送的訊息是不間斷的,則用while進行接收;如果是有條件傳送,則採用判斷語言if進行接收

while(true)

} }

程序中線程間通訊

一般而言,應用程式中的乙個次要執行緒總是為主執行緒執行特定的任務,這樣,主線程和次要執行緒間必定有乙個資訊傳遞的渠道,也就是主線程和次要執行緒間要進行通訊。這種執行緒間的通訊不但是難以避免的,而且在多執行緒程式設計中也是複雜和頻繁的,下面將進行說明。由於屬於同乙個程序的各個執行緒共享作業系統分配該程...

關於子執行緒與主線程與hander通訊

子執行緒不能更新ui,主線程不能做耗時操作。操做流程是 子執行緒耗時完畢傳給handler sendmessage再傳給messagequeue再給looper最後傳給ui執行緒。arg1 arg2傳遞整數型。obj傳輸大部分。what屬性判斷。通過time integer.parseint ed1...

Android UI主線程與子執行緒

乙個android 程式預設情況只有乙個程序,但是乙個程序可以有多個執行緒。其中有乙個ui 執行緒也稱為ui主線程,ui thread在android程式執行的時候就被建立,主要是負責控制ui介面的顯示 更新和控制項互動。所有的android應用程式元件 包括activity service bro...