資源描述:
《Windows操作系統(tǒng)Windows 2000xp線程間通信實驗報告.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、Windows操作系統(tǒng)C/C++程序?qū)嶒炐彰簩W(xué)號:班級:信工7班院系:信息工程學(xué)院2012年11月20日4實驗四Windows2000/xp線程間通信一、背景知識二、實驗?zāi)康娜?、工?準備工作四、實驗內(nèi)容1.文件對象步驟1:登錄進入Windows2000/xpProfessional。步驟2:在“開始”菜單中單擊“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,進入VisualC++窗口。步驟3:在工具欄單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序
2、4-1.cpp。步驟4:單擊“Build”菜單中的“Compile4-1.cpp”命令,并單擊“是”按鈕確認。系統(tǒng)對4-1.cpp進行編譯。步驟5:編譯完成后,單擊“Build”菜單中的“Build4-1.exe”命令,建立4-1.exe可執(zhí)行文件。操作能否正常進行?如果不行,則可能的原因是什么?可以正常運行步驟6:在工具欄單擊“ExecuteProgram”按鈕,執(zhí)行4-1.exe程序。運行結(jié)果(如果運行不成功,則可能的原因是什么?):4閱讀和分析程序4-1,請回答問題:1)清單4-1中啟動了多少個單獨的讀寫線程?創(chuàng)建100
3、個線程從文件中進行讀寫2)使用了哪個系統(tǒng)API函數(shù)來創(chuàng)建線程例程?CreateThread3)文件的讀和寫操作分別使用了哪個API函數(shù)?讀:ReadFile寫:WriteFile每次運行進程時,都可看到清單4-3中的每個線程從前面的線程中讀取數(shù)據(jù)并將數(shù)據(jù)增加,文件中的數(shù)值連續(xù)增加。這個示例是很簡單的通訊機制。可將這一示例用作編寫自己的文件讀/寫代碼的模板。請注意程序中寫入之前文件指針的重置。重置文件指針是必要的,因為該指針在讀取結(jié)束時將處于前四個字節(jié)之后,同一指針還要用于向文件寫入數(shù)據(jù)。如果函數(shù)向該處寫入新數(shù)值,則下次進程運行
4、時,只能讀到原來的數(shù)值。那么:4)在程序中,重置文件指針使用了哪一個函數(shù)?重置文件指針使用了SetFilePointer5)從步驟6的輸出結(jié)果,對照分析4-1程序,可以看出程序運行的流程嗎?請簡單描述:創(chuàng)建100個線程從文件進行讀寫,在數(shù)據(jù)文件中讀取當(dāng)前數(shù)據(jù)的簡單線程4,顯示當(dāng)前數(shù)據(jù),增加數(shù)值,并將增加的數(shù)值寫回永久存儲介質(zhì)。寫的時候也一樣,顯示當(dāng)前數(shù)據(jù),增加數(shù)值,并將增加的數(shù)值寫回永久存儲介質(zhì)。2.文件映射對象步驟7:在VisualC++窗口的工具欄中單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序4-2.cpp。步
5、驟8:單擊“Build”菜單中的“Compile4-2.cpp”命令,并單擊“是”按鈕確認。系統(tǒng)對4-2.cpp進行編譯。步驟9:編譯完成后,單擊“Build”菜單中的“Build4-2.exe”命令,建立4-2.exe可執(zhí)行文件。操作能否正常進行?如果不行,則可能的原因是什么?可以正常運行步驟10:在工具欄單擊“ExecuteProgram”按鈕,執(zhí)行4-2.exe程序。運行結(jié)果(如果運行不成功,則可能的原因是什么?):閱讀和分析程序4-2,請回答:41)程序中用來創(chuàng)建一個文件映射對象的系統(tǒng)API函數(shù)是哪個?CreateFi
6、leMapping2)在文件映射上創(chuàng)建和關(guān)閉文件視圖分別使用了哪一個系統(tǒng)函數(shù)?a.創(chuàng)建文件視圖:MapViewOfFileb.關(guān)閉文件視圖:UnmapViewOfFile3)對照清單4-2,分析程序運行并填空:運行時,清單4-2所示程序首先通過(CreateFileMapping)函數(shù)創(chuàng)建一個小型的文件映射對象(HANDLEhMapping),接著,使用系統(tǒng)API函數(shù)(CreateMutex)再創(chuàng)建一個保護其應(yīng)用的互斥體(g_hMutexMapping)。然后,應(yīng)用程序創(chuàng)建100個線程,每個都允許進行同樣的進程,即:通過互斥體
7、獲得訪問權(quán),這個操作是由語句:g_hMutexMapping=::CreateMutex(NULL,FALSE,NULL)實現(xiàn)的。再通過函數(shù)(WaitForSingleObject)操作將視圖映射到文件,將高32位看作有符號整數(shù),將該數(shù)值增加(即命令:++(*pnData);),再將新數(shù)值顯示在控制臺上。每個線程清除文件的視圖并在退出之前釋放互斥體的語句是ReleaseMutex(g_hMutexMapping)。當(dāng)線程完成時,應(yīng)用程序關(guān)閉并退出。4)將清單4-2中的語句::Sleep(500);刪除(例如在語句前面加上“//
8、”)后,重新編譯運行,結(jié)果有變化嗎?為什么?有變化,結(jié)果出來得更快了,因為Sleep(500)讓程序在這里睡了一會,如果刪除的話,程序直接出結(jié)果了,所以會快一點。4