




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗一使用 EVC 利用同步對象實現(xiàn)“線程同步”1實驗?zāi)康模?.2.3.4.5.熟悉Win CE 中線程的基本概念;熟悉在EVC4.0 調(diào)試應(yīng)用程序的基本方法;掌握控件(Group Box,List Box,Button)的使用方法;掌握創(chuàng)建線程的方法;掌握使用“事件對象”實現(xiàn)線程同步;2實驗任務(wù):1.2.編程實現(xiàn)未使用線程同步,使用兩個線程對一數(shù)組同時賦值;編程實現(xiàn)使用線程同步,使用兩個線程對一數(shù)組同時賦值;3實驗步驟:1)未使用線程同步1.使用 EVC 向?qū)?File-New)新建一個項目在Projects 選項卡選擇“WCE Pocket PC 2003 MFC AppWizard(ex
2、e)”項,在右側(cè)的Project name 和Location 輸入欄中分別輸入項目的名稱和項目的徑,如圖 1 所示,這里項目名稱設(shè)為ThreadAsyn。路圖 1 新建項目框輸入項目名和路徑后,單擊 OK 按鈕,進入如圖 2 所示的向?qū)Ы缑娴牡谝徊?。在該界面中的?yīng)用程序類型中選擇 Dialog based(框類型),單擊 Next 按鈕,進入向?qū)У牡?2 步。在該界面中輸入應(yīng)用程序的標題,認操作完成向?qū)Ъ纯?。直接按照默圖 2 向?qū)Ы缑?.如下圖 3 所示設(shè)置圖 3(用于設(shè)置工程名SDK編譯類型目標機器)3.設(shè)計框樣式。首先在工作區(qū)(WorkSpace)點“ResourceView”(IDD_
3、THREADASYN _DIALOG)。如圖 4。,雙擊打開框窗體圖 4 打開的框窗體設(shè)計框窗體如圖 5 所示。注意:先在框控件上放置List Box 控件,然后再放置 Group Box 控件。圖 5“線程同步演示_沒有同步措施”實例界面可以通過右鍵單擊控件,選擇“Properties”設(shè)置控件的“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ù),在這里需要將它們的權(quán)限設(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,標題設(shè)為“Execute”,用于創(chuàng)建線程IDC_SICONEGroup Box,標題設(shè)為“Array1”IDC_SICTWOGroup Box,標題設(shè)為“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;/顯示已經(jīng)賦值的數(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í)行結(jié)果是:線程數(shù)組 1 的值是 1100 順序排列的,線程數(shù)組 2 的值是 101200順序排列的。很顯然,未使用同步技術(shù)的例子沒有使得到期望的結(jié)果。圖 6 “線程同步演示_沒有同步措施”實例運行結(jié)果2)使用線程同步1.使用 EVC 向?qū)?File-New)新建一個項目在Projects 選項卡選擇“WC
10、E Pocket PC 2003 MFC AppWizard(exe)”項,在右側(cè)的Project name 和Location 輸入欄中分別輸入項目的名稱和項目的徑,如圖 1 所示,這里項目名稱設(shè)為ThreadSynByEvent。路輸入項目名和路徑后,單擊 OK 按鈕,進入如圖 2 所示的向?qū)Ы缑娴牡谝徊健T谠摻缑嬷械膽?yīng)用程序類型中選擇 Dialog based(框類型),單擊 Next 按鈕,進入向?qū)У牡?2 步。在該界面中輸入應(yīng)用程序的標題,認操作完成向?qū)Ъ纯?。直接按照?.設(shè)置如下圖 7 所示圖 7(用于設(shè)置工程名SDK編譯類型目標機器)3.設(shè)計框樣式。同實驗 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ù),在這里需要將它們的權(quán)限為靜態(tài)(sic) ,具體 如下: ( 添加到類設(shè)為私有,并且必須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;/顯示已經(jīng)賦值的數(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)設(shè)置成已標識。代碼片段如下:放在”return TRUE;
17、”之前。/創(chuàng)建線程同步事件對象,自動設(shè)置事件對象狀態(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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省無錫市輔仁中學(xué)2026屆中考物理押題卷含解析
- 江蘇省蘇州市吳中、吳江、相城區(qū)重點達標名校2026屆中考物理考試模擬沖刺卷含解析
- 江西省贛州市南康區(qū)唐西片區(qū)達標名校2026屆中考英語押題卷含答案
- 2026屆湖北省宜昌市東部中考語文四模試卷含解析
- 湖北省麻城思源實驗校2026屆中考聯(lián)考英語試題含答案
- 2026屆廣東省陽江市第二中學(xué)中考四模語文試題含解析
- 2026屆遼寧省沈陽市第一三四中學(xué)中考考前最后一卷數(shù)學(xué)試卷含解析
- 2026屆上海市普陀區(qū)重點中學(xué)畢業(yè)升學(xué)考試模擬卷物理卷含解析
- 2026屆河南省信陽固始縣聯(lián)考中考英語模擬預(yù)測題含答案
- 陜西省西安市西電附中重點名校2026屆中考一模物理試題含解析
- 醫(yī)院消防安全知識培訓(xùn)PPT課件.pptx
- 中國嘉德北京保利等藝術(shù)品拍賣公司庫房管理制度
- 《儒林外史》試題含答案-儒林外史題目及答案
- 2022年藥品檢驗員綜合理論技能考試題庫(精選500題)
- 10KV變壓器安裝施工工藝標準[詳]
- 代理費監(jiān)理費費用計算工具(Excel)自帶公式
- 亞硝酸鹽測定評分標準
- 鋼鐵熱連軋機1780mm說明書(新)
- MEI004內(nèi)層排板、疊板、拆板工作指示2013內(nèi)容
- 解讀建筑基樁檢測技術(shù)規(guī)范PPT課件
- 2022年2022年機械制圖試題及答案,機械制圖習(xí)題及答案
評論
0/150
提交評論