VC6 0 MFC多執行緒執行

2021-10-24 08:26:30 字數 1662 閱讀 1457

windows中沒有多程序的概念,只有多執行緒。

在mfc中一般使用afxbeginthread來啟動工作者執行緒,用新建類,然後new這個類後呼叫createthread方法來啟動介面執行緒。

工作者執行緒和介面執行緒的區別是:介面執行緒比工作者執行緒多乙個可接收windows訊息的功能,也就是說,我們可以給介面執行緒傳送自定義訊息,讓介面執行緒響應。

來乙份工作者執行緒的**樣例:

// 定義工作者執行緒函式

uint threadscansockets

(lpvoid pparam)

}// 呼叫方法:

afxbeginthread

(threadscansockets,

null

);

介面執行緒的建立相對複雜,步驟如下:

1、點選單的檢視–建立類嚮導,add class… – new…。

2、填寫類名稱,如cmythread,base class選擇cwinthread,點ok按鈕(我這裡提示無法開啟mythread.h,其實已經建立成功了,關閉視窗就行了,這個是vc的bug):

3、注意首先把頭檔案裡的建構函式、析構函式改為public型別。定義乙個自定義的使用者訊息,因為這個類主要是要響應一些訊息做一些事情(wm_user+n), n >= 0:

#define wm_msg_fireuimsg (wm_user+11) 

// 使用者自定義訊息

4、註冊訊息函式,如下所示(注意你只需要新增on_thread_message到這個位置即可,其它**vc已經自動生成了):

begin_message_map

(cmythreadmsg, cwinthread)

//}afx_msg_map

end_message_map

()

5、剩下的懂c++程式設計的同學就都懂了,在.**件裡增加:

afx_msg void

fireuiwork

(wparam wpparam, lparam lpparam)

;// 訊息處理函式

然後實現它!

void cmythreadmsg::

fireuiwork

(wparam wpparam, lparam lpparam)

6、建立執行緒並執行:

// 定義全域性變數

cfireuithreadmsg *g_pthread =

null

;// 其它**.......

g_pthread =

newcfireuithreadmsg()

;g_pthread -

>

createthread()

;

7、給該執行緒傳送訊息:

介面某個位置建立乙個按鈕,在按鈕響應函式裡增加下面的**:

g_pthread->postthreadmessage(wm_msg_fireuimsg, 100, 200);

除錯程式看看效果吧。

VC 6 0MFC執行的簡單流程

背景 正文 首先,本次工程檔名為 gpiotest 按照mfc嚮導一路往下,使用dialog base視窗,結果會生成三個分類資料夾 source files head files resource files 具體存放什麼就不用說了。其中會生成三個 cpp 檔案,gpiotest.cpp gpio...

VC 6 0 MFC除錯技巧

vc的除錯真的很讓人頭大,特別是用過eclipse這種idea後猛的一下接觸vc編譯器的人,沒辦法有的時候那些用vc開發的歷史遺留問題還是要解決,mfc視窗程式除錯起來沒有了控制台的輸出找起bug來也是真讓人頭疼不已。好在網上考到了vc編譯器中 工具 mfc tracer,我們進行debug的時候就...

VC 6 0 MFC顯示模態對話方塊和非模態對話方塊

include adddatadlg.h 新增標頭檔案 cadddatadlg adddata dialog 在標頭檔案中定義對話方塊物件 cadddatadlg為該對話方塊對應的類 int nreturn adddata dialog.domodal 在原始檔函式中顯示模態對話方塊,將返回值賦給n...