版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、多線(xiàn)程編程之三線(xiàn)程間通訊 - VC知識(shí)庫(kù)文章多線(xiàn)程編程之三 線(xiàn)程間通訊作者:韓耀旭下載源代碼七、線(xiàn)程間通訊一般而言 , 應(yīng)用程序中的一個(gè)次要線(xiàn)程總是為主線(xiàn)程執(zhí)行特定的任務(wù) , 這樣 , 主線(xiàn)程和次要線(xiàn)程間必定有一個(gè)信息傳遞的渠 道 , 也就是主線(xiàn)程和次要線(xiàn)程間要進(jìn)行通信。這種線(xiàn)程間的通信不但是難以避免的,而且在多線(xiàn)程編程中也是復(fù)雜和頻繁的, 下面將進(jìn)行說(shuō)明。1. 使用全局變量進(jìn)行通信由于屬于同一個(gè)進(jìn)程的各個(gè)線(xiàn)程共享操作系統(tǒng)分配該進(jìn)程的資源,故解決線(xiàn)程間通信最簡(jiǎn)單的一種方法是使用全局變 量。對(duì)于標(biāo)準(zhǔn)類(lèi)型的全局變量,我們建議使用 volatile 修飾符,它告訴編譯器無(wú)需對(duì)該變量作任何的優(yōu)化,即無(wú)
2、需將它 放到一個(gè)寄存器中,并且該值可被外部改變。如果線(xiàn)程間所需傳遞的信息較復(fù)雜,我們可以定義一個(gè)結(jié)構(gòu),通過(guò)傳遞指 向該結(jié)構(gòu)的指針進(jìn)行傳遞信息。2. 使用自定義消息我們可以在一個(gè)線(xiàn)程的執(zhí)行函數(shù)中向另一個(gè)線(xiàn)程發(fā)送自定義的消息來(lái)達(dá)到通信的目的。一個(gè)線(xiàn)程向另外一個(gè)線(xiàn)程發(fā)送消 息是通過(guò)操作系統(tǒng)實(shí)現(xiàn)的。利用 Windows 操作系統(tǒng)的消息驅(qū)動(dòng)機(jī)制,當(dāng)一個(gè)線(xiàn)程發(fā)出一條消息時(shí),操作系統(tǒng)首先接收到 該消息,然后把該消息轉(zhuǎn)發(fā)給目標(biāo)線(xiàn)程,接收消息的線(xiàn)程必須已經(jīng)建立了消息循環(huán)。例程 7 MultiThread7該例程演示了如何使用自定義消息進(jìn)行線(xiàn)程間通信。首先,主線(xiàn)程向 CCalculateThread 線(xiàn)程發(fā)送消息
3、 WM_CALCULATE, CCalculateThread 線(xiàn)程收到消息后進(jìn)行計(jì)算,再向主線(xiàn)程發(fā)送 WM_DISPLAY消息,主線(xiàn)程收到該消息后顯示計(jì)算結(jié)果。1. 建立一個(gè)基于對(duì)話(huà)框的工程 MultiThread7,在對(duì)話(huà)框 IDD_MULTITHREAD7_DIALOG中加入三個(gè)單選按鈕 IDC_RADIO1, IDC_RADIO2, IDC_RADIO3,標(biāo)題分別為 1+2+3+4+.+10, 1+2+3+4+.+50, 1+2+3+4+.+100。加入按 鈕 IDC_SUM,標(biāo)題為 “ 求和 ” 。加入標(biāo)簽框 IDC_STATUS,屬性選中 “ 邊框 ” ;2. 在 MultiThr
4、ead7Dlg.h 中定義如下變量:protected:int nAddend;代表加數(shù)的大小。多線(xiàn)程編程之三線(xiàn)程間通訊 - VC知識(shí)庫(kù)文章分別雙擊三個(gè)單選按鈕,添加消息響應(yīng)函數(shù):void CMultiThread7Dlg:OnRadio1(nAddend=10;void CMultiThread7Dlg:OnRadio2(nAddend=50;void CMultiThread7Dlg:OnRadio3(nAddend=100;并在 OnInitDialog 函數(shù)中完成相應(yīng)的初始化工作:BOOL CMultiThread7Dlg:OnInitDialog(CButton*GetDlgItem
5、(IDC_RADIO1->SetCheck(TRUE;nAddend=10;在 MultiThread7Dlg.h 中添加:#include "CalculateThread.h"#define WM_DISPLAY WM_USER+2class CMultiThread7Dlg : public CDialog/ Constructionpublic:CMultiThread7Dlg(CWnd* pParent = NULL; / standard constructor CCalculateThread* m_pCalculateThread;protected:
6、int nAddend;LRESULT OnDisplay(WPARAM wParam,LPARAM lParam;在 MultiThread7Dlg.cpp 中添加:BEGIN_MESSAGE_MAP(CMultiThread7Dlg, CDialogON_MESSAGE(WM_DISPLAY,OnDisplay多線(xiàn)程編程之三線(xiàn)程間通訊 - VC知識(shí)庫(kù)文章END_MESSAGE_MAP(LRESULT CMultiThread7Dlg:OnDisplay(WPARAM wParam,LPARAM lParamint nTemp=(intwParam;SetDlgItemInt(IDC_STA
7、TUS,nTemp,FALSE;return 0;以上代碼使得主線(xiàn)程類(lèi) CMultiThread7Dlg 可以處理 WM_DISPLAY消息,即在 IDC_STATUS標(biāo)簽框中顯示計(jì)算結(jié)果。 3. 雙擊按鈕 IDC_SUM,添加消息響應(yīng)函數(shù):void CMultiThread7Dlg:OnSum(m_pCalculateThread=(CCalculateThread*AfxBeginThread(RUNTIME_CLASS(CCalculateThread;Sleep(500;m_pCalculateThread->PostThreadMessage(WM_CALCULATE,nAdd
8、end,NULL;OnSum(函數(shù)的作用是建立 CalculateThread 線(xiàn)程,延時(shí)給該線(xiàn)程發(fā)送 WM_CALCULATE消息。4. 右擊工程并選中 “New Class” 為工程添加基類(lèi)為 CWinThread 派生線(xiàn)程類(lèi) CCalculateThread。在文件 CalculateThread.h 中添加#define WM_CALCULATE WM_USER+1class CCalculateThread : public CWinThreadprotected:afx_msg LONG OnCalculate(UINT wParam,LONG lParam;在文件 Calcula
9、teThread.cpp 中添加LONG CCalculateThread:OnCalculate(UINT wParam,LONG lParamint nTmpt=0;for(int i=0;i<=(intwParam;i+nTmpt=nTmpt+i;Sleep(500;:PostMessage(HWND(GetMainWnd(->GetSafeHwnd(,WM_DISPLAY,nTmpt,NULL;多線(xiàn)程編程之三線(xiàn)程間通訊 - VC知識(shí)庫(kù)文章return 0;BEGIN_MESSAGE_MAP(CCalculateThread, CWinThread/AFX_MSG_MAP(CCalculateThread/ NOTE - the ClassWizard will add and remove mapping macros here. /AFX_MSG_MAPON_THREAD_MESSAGE(WM_CALCULATE,OnCalculate/和主線(xiàn)程對(duì)比,注意它們的區(qū)別END_MESSAGE_MAP(在 CalculateThread.cpp 文件的開(kāi)頭添加一條:#include "MultiThread7Dlg.h"以上代碼為 CCalculateThread 類(lèi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024影視劇《逆時(shí)光》化妝團(tuán)隊(duì)外包協(xié)議
- 3 《鴻門(mén)宴》(說(shuō)課稿)-2024-2025學(xué)年高一語(yǔ)文下學(xué)期同步教學(xué)說(shuō)課稿專(zhuān)輯(統(tǒng)編版必修下冊(cè))
- 七夕節(jié)的歷史脈絡(luò)
- 科學(xué)探索之門(mén)
- 綠色農(nóng)業(yè):致未來(lái)
- 塔式起重機(jī)造價(jià)協(xié)議書(shū)(2篇)
- 多人租車(chē)協(xié)議書(shū)(2篇)
- 專(zhuān)業(yè)化櫥柜工程服務(wù)安裝協(xié)議2024參考資料版B版
- 2025版蟲(chóng)草養(yǎng)生產(chǎn)品研發(fā)與銷(xiāo)售合作協(xié)議范本3篇
- 2024年設(shè)備購(gòu)買(mǎi)協(xié)議模板大全實(shí)操版版B版
- 義務(wù)教育教科書(shū)英語(yǔ)Go for it七年級(jí)上冊(cè)單詞表
- 第一章 電力系統(tǒng)潮流計(jì)算1
- ICU常用鎮(zhèn)靜藥物介紹及藥學(xué)監(jiān)護(hù)
- 粉末丁腈橡膠使用方法
- 大氣課程設(shè)計(jì)-—袋式除塵器
- 社區(qū)醫(yī)院市場(chǎng)推廣傳播建議
- 蘇科版七年級(jí)生物學(xué)(上)教學(xué)工作總結(jié)
- 阿特拉斯擰緊機(jī)技術(shù)方案
- 中國(guó)人民財(cái)產(chǎn)保險(xiǎn)股份有限公司理賠稽查管理暫行辦法
- 鋼管、管件表面積計(jì)算公式(精編版)
- 新能源汽車(chē)充電設(shè)備安全培訓(xùn)
評(píng)論
0/150
提交評(píng)論