版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗一使用 EVC 利用同步對象實現(xiàn)“線程同步”1實驗目的:1.2.3.4.5.熟悉Win CE 中線程的基本概念;熟悉在EVC4.0 調試應用程序的基本方法;掌握控件(Group Box,List Box,Button)的使用方法;掌握創(chuàng)建線程的方法;掌握使用“事件對象”實現(xiàn)線程同步;2實驗任務:1.2.編程實現(xiàn)未使用線程同步,使用兩個線程對一數(shù)組同時賦值;編程實現(xiàn)使用線程同步,使用兩個線程對一數(shù)組同時賦值;3實驗步驟:1)未使用線程同步1.使用 EVC 向導(File-New)新建一個項目在Projects 選項卡選擇“WCE Pocket PC 2003 MFC AppWizard(ex
2、e)”項,在右側的Project name 和Location 輸入欄中分別輸入項目的名稱和項目的徑,如圖 1 所示,這里項目名稱設為ThreadAsyn。路圖 1 新建項目框輸入項目名和路徑后,單擊 OK 按鈕,進入如圖 2 所示的向導界面的第一步。在該界面中的應用程序類型中選擇 Dialog based(框類型),單擊 Next 按鈕,進入向導的第 2 步。在該界面中輸入應用程序的標題,認操作完成向導即可。直接按照默圖 2 向導界面2.如下圖 3 所示設置圖 3(用于設置工程名SDK編譯類型目標機器)3.設計框樣式。首先在工作區(qū)(WorkSpace)點“ResourceView”(IDD_
3、THREADASYN _DIALOG)。如圖 4。,雙擊打開框窗體圖 4 打開的框窗體設計框窗體如圖 5 所示。注意:先在框控件上放置List Box 控件,然后再放置 Group Box 控件。圖 5“線程同步演示_沒有同步措施”實例界面可以通過右鍵單擊控件,選擇“Properties”設置控件的“ID”屬性和“Caption”屬性。定義要用到的常量和變量。定義常量MAXDATASIZE,用于定義數(shù)組的大小。具體操作是:首先打開類CThreadAsynDlg“FileView”的定義文件 ThreadAsynDlg.h( 在工作區(qū)“ WorkSpace ” 點,然后點擊 Header Fil
4、es),然后在類定義之前添加如下代碼:/定義數(shù)組大小const MAXDATASIZE=100;在類CThreadAsynDlg 中定義私有變量,代碼如下:private:um; /記數(shù) m_aGlobalDataMAXDATASIZE; /線程需要4. 定義線程函數(shù)。的數(shù)組在類CThreadAsynDlg 中線程函數(shù),在這里需要將它們的權限設為私有,并且必須為靜態(tài)(sic),具體如下:(添加到類 CThreadAsynDlg的定義文件CThreadAsynDlg.h,注意:放到類的里面) private:/線程函數(shù)sic DWORD Threroc(PVOID pArg);線程函數(shù)的具體實現(xiàn)
5、如下代碼:(實現(xiàn)代碼添加到 ThreadAsynDlg.cpp)/*函數(shù)介紹:線程執(zhí)行過程控件ID說明IDC_LISTONEList Box,用于顯示線程數(shù)組 1 的值,要注意將其的sort 屬性去掉IDC_LISTTWOList Box,用于顯示線程數(shù)組 2 的值,要注意將其的sort 屬性去掉IDC_BTNEXECButton,標題設為“Execute”,用于創(chuàng)建線程IDC_SICONEGroup Box,標題設為“Array1”IDC_SICTWOGroup Box,標題設為“Array2”*參數(shù):pArg:創(chuàng)建線程時,傳進來的參數(shù),這里指的列表框控件指針*出口參數(shù):(無)*返回值:這里
6、只返回 1。*/DWORDCThreadAsynDlg:ThreCThreadAsynDlg * pDlg; CListBox * pLstBox; pLstBox = (CListBox*)pArg;roc(PVOID pArg)pDlg = (CThreadAsynDlg*)AfxGetMainWnd(); TCHAR buffer10;/給數(shù)組賦值for (i=0;ium+;pDlg-m_aGlobalDatai = pDlg- Sleep(5);um;/顯示已經賦值的數(shù)組for(i = 0 ; i m_aGlobalDatai,buffer,10); pLstBox-AddString
7、(buffer);return 1;5.創(chuàng)建兩個線程。添加”Execute”按鈕的單擊事件實現(xiàn)代碼。在框窗體上直接雙擊按鈕,EVC 便會自動創(chuàng)建它的單擊方法。其中” Execute”按鈕的單擊事件實現(xiàn)代碼如下:/*執(zhí)行按鈕單擊事件,用于創(chuàng)建兩個線程*/void CThreadAsynDlg:OnBtnexec()DWORD dwThreadId1,dwThreadId2; HANDLE handle1,handle2;CListBox * pLstOne; CListBox * pLstTwo;pLstOne = (CListBox*)GetDlgItem(IDC_LISTONE); pLst
8、Two = (CListBox*)GetDlgItem(IDC_LISTTWO);/初始化計數(shù)值um = 0;/創(chuàng)建兩個線程handle1 = CreateThread(NULL,0,Thre handle2 = CreateThread(NULL,0,Thre if (!handle1)roc,pLstOne,0,&dwThreadId1); roc,pLstTwo,0,&dwThreadId2);AfxMessageBox(_T(Thread1 Creation failed);if (!handle2)AfxMessageBox(_T(Thread2 Creation failed);C
9、loseHandle(handle1); CloseHandle(handle2);6.編譯執(zhí)行。點擊上的圖標,編譯生成可執(zhí)行文件,此時模擬器被激活。,運行ThreadAsyn.exe,可以看到程序在模擬器中運行如圖 6。點擊圖標至此,“線程同步演示_沒有同步措施”的例子就編寫完成了。的期望執(zhí)行結果是:線程數(shù)組 1 的值是 1100 順序排列的,線程數(shù)組 2 的值是 101200順序排列的。很顯然,未使用同步技術的例子沒有使得到期望的結果。圖 6 “線程同步演示_沒有同步措施”實例運行結果2)使用線程同步1.使用 EVC 向導(File-New)新建一個項目在Projects 選項卡選擇“WC
10、E Pocket PC 2003 MFC AppWizard(exe)”項,在右側的Project name 和Location 輸入欄中分別輸入項目的名稱和項目的徑,如圖 1 所示,這里項目名稱設為ThreadSynByEvent。路輸入項目名和路徑后,單擊 OK 按鈕,進入如圖 2 所示的向導界面的第一步。在該界面中的應用程序類型中選擇 Dialog based(框類型),單擊 Next 按鈕,進入向導的第 2 步。在該界面中輸入應用程序的標題,認操作完成向導即可。直接按照默2.設置如下圖 7 所示圖 7(用于設置工程名SDK編譯類型目標機器)3.設計框樣式。同實驗 1)未使用線程同步。定
11、義要用到的常量和變量。定義常量MAXDATASIZE,用于定義數(shù)組的大小。具體操作是:首先打開類4.CThreadSynByEventDlg的 定 義 文 件 ThreadSynByEventDlg.h( 在工作區(qū) (WorkSpace)點“FileView”,然后點擊 Header Files),然后在類定義之前添加如下代碼:/定義數(shù)組大小const MAXDATASIZE=100;在類CThreadSynByEventDlg 中定義私有變量,代碼如下:private:um; /記數(shù)m_aGlobalDataMAXDATASIZE; /線程需要 HANDLE m_hSynEvent; /線程
12、同步事件句柄5. 定義線程函數(shù)。的數(shù)組在類CThreadSynByEventDlg 中線程函數(shù),在這里需要將它們的權限為靜態(tài)(sic) ,具體 如下: ( 添加到類設為私有,并且必須CThreadSynByEventDlg 的定義文件ThreadSynByEventDlg.h,注意:放到類的里面)private:/線程函數(shù)sic DWORD Threroc(PVOID pArg);線程函數(shù)的具體實現(xiàn)如下代碼:(實現(xiàn)代碼添加到 ThreadSynByEventDlg.cpp)/*函數(shù)介紹:線程執(zhí)行過程*參數(shù):pArg:創(chuàng)建線程時,傳進來的參數(shù),這里指的列表框控件指針*出口參數(shù):(無)*返回值:這
13、里只返回 1。*/DWORDCThreadSynByEventDlg:ThreCThreadSynByEventDlg * pDlg; CListBox * pLstBox;pLstBox = (CListBox*)pArg;roc(PVOID pArg)pDlg = (CThreadSynByEventDlg*)AfxGetMainWnd(); TCHAR buffer10;/等待同步事件信號if (WaitForSingleObject(pDlg-m_hSynEvent,INFINITE) = WAIT_OBJECT_0)/給數(shù)組賦值for (i=0;ium+;pDlg-m_aGlobal
14、Datai = pDlg- Sleep(5);um;/顯示已經賦值的數(shù)組for(i = 0 ; i m_aGlobalDatai,buffer,10); pLstBox-AddString(buffer);/打開同步事件信號 SetEvent(pDlg-m_hSynEvent); return 1;6.創(chuàng)建兩個線程。添加”Execute”按鈕的單擊事件實現(xiàn)代碼。在框窗體上直接雙擊按鈕,EVC 便會自動創(chuàng)建它的單擊方法。其中” Execute”按鈕的單擊事件實現(xiàn)代碼如下:/*執(zhí)行按鈕單擊事件,用于創(chuàng)建兩個線程*/void CThreadSynByEventDlg:OnBtnexec()DWORD
15、 dwThreadId1,dwThreadId2; HANDLE handle1,handle2;CListBox * pLstOne; CListBox * pLstTwo;pLstOne = (CListBox*)GetDlgItem(IDC_LISTONE); pLstTwo = (CListBox*)GetDlgItem(IDC_LISTTWO);/初始化計數(shù)值um = 0;/創(chuàng)建兩個線程handle1 = CreateThread(NULL,0,Thre handle2 = CreateThread(NULL,0,Thre if (!handle1)roc,pLstOne,0,&dw
16、ThreadId1); roc,pLstTwo,0,&dwThreadId2);AfxMessageBox(_T(Thread1 Creation failed );if (!handle2)AfxMessageBox(_T(Thread2 Creation failed );CloseHandle(handle1); CloseHandle(handle2);7在 OnInitDialog 中添加代碼。在類CThreadSynByEventDlg 的 OnInitDialog 方法中添加代碼,用于創(chuàng)建線程同步事件對象,并將其初始化狀態(tài)設置成已標識。代碼片段如下:放在”return TRUE;
17、”之前。/創(chuàng)建線程同步事件對象,自動設置事件對象狀態(tài),事件對象初始狀態(tài)為已標識 m_hSynEvent = CreateEvent(NULL,false,true,NULL);8 添加窗體時代碼。在類CThreadSynByEventDlg 中afx_msg void OnDestroy();窗體函數(shù),具體如下:(添加到類CThreadSynByEventDlg 的定義文件ThreadSynByEventDlg.h,注意:放到類的里面,添加到afx_msg void OnBtnexec();之后)窗 體函 數(shù) 的 具 體 實 現(xiàn) 如 下 代 碼 :( 實 現(xiàn) 代 碼 添 加 到ThreadSynByEventDlg.cpp)void CThreadSynByEventDlg:OnDestroy()CDi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版工程清包合同:工程設計變更與施工方案調整
- 2024某企業(yè)與咨詢公司之間的管理咨詢服務合同
- 2025年度香菇食品產品線擴展與市場拓展合同3篇
- 二零二五版智慧交通系統(tǒng)開發(fā)與技術支持協(xié)議2篇
- 二零二五版二手房買賣合同公證與節(jié)能環(huán)保改造服務協(xié)議2篇
- 2025年度跨國企業(yè)集團財務合并報表編制合同3篇
- 2024年銷售代理協(xié)議(意向)3篇
- 個性化活動策劃方案協(xié)議2024規(guī)格版A版
- 2024版地暖安裝工程承包合同書
- 2024版企業(yè)業(yè)務外包人員協(xié)議模板版B版
- 前列腺增生藥物治療
- 人工智能知識圖譜(歸納導圖)
- 滴滴補貼方案
- 民宿建筑設計方案
- 干部基本信息審核認定表
- 2023年11月外交學院(中國外交培訓學院)2024年度公開招聘24名工作人員筆試歷年高頻考點-難、易錯點薈萃附答案帶詳解
- 春節(jié)行車安全常識普及
- 電機維護保養(yǎng)專題培訓課件
- 汽車租賃行業(yè)利潤分析
- 春節(jié)拜年的由來習俗來歷故事
- 2021火災高危單位消防安全評估導則
評論
0/150
提交評論