《windows程序設(shè)計(jì)》實(shí)驗(yàn)指導(dǎo)書_第1頁
《windows程序設(shè)計(jì)》實(shí)驗(yàn)指導(dǎo)書_第2頁
《windows程序設(shè)計(jì)》實(shí)驗(yàn)指導(dǎo)書_第3頁
《windows程序設(shè)計(jì)》實(shí)驗(yàn)指導(dǎo)書_第4頁
《windows程序設(shè)計(jì)》實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

《windows程序設(shè)計(jì)》試驗(yàn)指導(dǎo)書計(jì)算機(jī)專業(yè)試驗(yàn)中心2023.05目錄\l“_TOC_250019“試驗(yàn)一、進(jìn)程試驗(yàn) 3\l“_TOC_250018“創(chuàng)立一個(gè)進(jìn)程來運(yùn)行一個(gè)應(yīng)用程序 3\l“_TOC_250017“一、目的 3\l“_TOC_250016“二、試驗(yàn)內(nèi)容 3\l“_TOC_250015“三、試驗(yàn)步驟: 3\l“_TOC_250014“進(jìn)程掌握實(shí)踐 4\l“_TOC_250013“試驗(yàn)二、線程試驗(yàn) 10\l“_TOC_250012“試驗(yàn)三、調(diào)整線程優(yōu)先級 20\l“_TOC_250011“一、目的 20\l“_TOC_250010“二、試驗(yàn)內(nèi)容 20\l“_TOC_250009“三、參考試驗(yàn)步驟: 21\l“_TOC_250008“第四次試驗(yàn)內(nèi)存試驗(yàn) 22\l“_TOC_250007“、Windows虛擬內(nèi)存試驗(yàn) 22\l“_TOC_250006“一、試驗(yàn)?zāi)康?22\l“_TOC_250005“二、試驗(yàn)工具 22\l“_TOC_250004“三、預(yù)備學(xué)問 22\l“_TOC_250003“四、試驗(yàn)內(nèi)容 22\l“_TOC_250002“、可選試驗(yàn) 30\l“_TOC_250001“、超星上的內(nèi)存治理試驗(yàn) 36\l“_TOC_250000“、超星上的共享內(nèi)存試驗(yàn) 41創(chuàng)立一個(gè)進(jìn)程來運(yùn)行一個(gè)應(yīng)用程序把握CreateProcess函數(shù)各個(gè)參數(shù)的使用方法.二、試驗(yàn)內(nèi)容使用該函數(shù)創(chuàng)立一個(gè)進(jìn)程〔通過調(diào)用 Windows配備的應(yīng)用程序附件如calc.exe等表達(dá)〕三、試驗(yàn)步驟:NewProjectsMFCAppWizard〔exe的對話框中,選“根本對話框“,然后點(diǎn)擊完成。在對話框中添加一個(gè)按鈕“計(jì)算器“設(shè)“計(jì)算器”子菜單名為ID_RUN_CAL;數(shù)中寫入相應(yīng)代碼,如:STARTUPINFOsi={sizeof(si)};TCHARszPath[MAX_PATH]=TEXT(“C:\\windows\\system32\\calc.exe“);SECURITY_ATTRIBUTESsaProcess,saThread;//定義進(jìn)程對象和線程對象的安全性屬性PROCESS_INFORMATIONpiProcessB;//定義創(chuàng)立進(jìn)程的信息saProcess.nLength=sizeof(saProcess);saProcess.lpSecurityDescriptor=NULL;saProcess.bInheritHandle=TRUE;//設(shè)置進(jìn)程安全屬性saThread.nLength=sizeof(saThread);saThread.lpSecurityDescriptor=NULL;saThread.bInheritHandle=FALSE;//設(shè)置線程安全屬性CreateProcess(NULL,szPath,&saProcess,&saThread,FALSE,0,NULL,NULL,&si,&piProcessB);//saProcesssaThreadNULL。buildexecute點(diǎn)擊“計(jì)算器”按鈕,將創(chuàng)立一個(gè)進(jìn)程來運(yùn)行計(jì)算器應(yīng)用程序。同理的方法可以翻開我們計(jì)算機(jī)上安裝的其他軟件!進(jìn)程掌握實(shí)踐試驗(yàn)三、調(diào)整線程優(yōu)先級一、目的把握線程優(yōu)先級的處理。二、試驗(yàn)內(nèi)容vc++MFC〔他們生成時(shí)間的先后〕其中:按鈕創(chuàng)立三個(gè)線程是同時(shí)創(chuàng)立三個(gè)線程,并設(shè)置優(yōu)先權(quán),他們執(zhí)行的進(jìn)度通過右邊的三個(gè)進(jìn)度條顯示出來;按鈕制止調(diào)整按鈕優(yōu)先級是對優(yōu)先級的制止,當(dāng)按下它后,右邊的進(jìn)度條應(yīng)當(dāng)就沒有那么分級明顯;3分別單獨(dú)掌握進(jìn)度條;三個(gè)編輯框是動態(tài)顯示進(jìn)程執(zhí)行的狀況。SetProcessPriorityBoost函數(shù)來制止系統(tǒng)動態(tài)調(diào)整該進(jìn)程中全部線程的優(yōu)先級;通過調(diào)用SetThreadPriority〔SetPriorityClass調(diào)整各線程的優(yōu)先級;然后通過一個(gè)進(jìn)度條來顯示各線程的運(yùn)行進(jìn)度;三、參考試驗(yàn)步驟:程序工程〔在ProjectSettings對話框,C/C++選項(xiàng)卡上,CodeGenerationUserun-timelibrary組合框中選定“MultithreadedDL〕布局如下圖。創(chuàng)立線程函數(shù),來完成一些工作。如:unsigned stdcallThreadFunc(PVOIDpvParam){DWORDi=0;while(i<100000000)i++;_endthreadex(0);return(0);}制止系統(tǒng)動態(tài)調(diào)整該進(jìn)程中全部線程的優(yōu)先級。如:SetProcessPriorityBoost(GetCurrentProcess,FALSE);創(chuàng)立多個(gè)線程。如:HANDLEthread1,thread2,thread3;unsignedthreadID;thread1=(HANDLE)_beginthreadex(NULL,0, &ThreadFunc,NULL,0,&threadID);thread2=(HANDLE)_beginthreadex(NULL,0, &ThreadFunc,NULL,0,&threadID);thread3=(HANDLE)_beginthreadex(NULL,0, &ThreadFunc,NULL,0,&threadID);留意:要先#include<process.h>。調(diào)整各線程的優(yōu)先級。如:SetThreadPriority(thread1,THREAD_PRIORITY_LOWEST);SetThreadPriority(thread2,THREAD_PRIORITY_NORMAL);SetThreadPriority(thread3,THREAD_PRIORITY_HIGHEST);通過進(jìn)度條來顯示各線程的運(yùn)行進(jìn)度;參見ftp://s@23/windows程序設(shè)計(jì)/《參考資料》里面的進(jìn)度條的制作第四次試驗(yàn)內(nèi)存試驗(yàn)、Windows虛擬內(nèi)存試驗(yàn)一、試驗(yàn)?zāi)康腤indows虛擬內(nèi)存的根本信息Windows虛擬內(nèi)存的構(gòu)造信息二、試驗(yàn)工具一臺WindowsXP操作系統(tǒng)的計(jì)算機(jī)。計(jì)算機(jī)裝有MicrosoftVisualStudioC++6.0專業(yè)版或企業(yè)版三、預(yù)備學(xué)問Windows虛擬內(nèi)存API。安排頁方法四、試驗(yàn)內(nèi)容虛擬內(nèi)存的檢測:利用VirtualQueryEx函數(shù)來檢查虛擬內(nèi)存空間。步驟一:進(jìn)入WindowsXP。步驟二:進(jìn)入MicrosoftVisualStudioC++6.01.cpp。步驟四:將下面的程序源代碼輸入。步驟五:單擊BuildCompile1.cpp,并單擊“是”按鈕。步驟六:假設(shè)沒有錯(cuò)誤,則單擊“執(zhí)行”按鈕,即可看到結(jié)果。輸入以下源代碼:#include<windows.h>#include<iostream>#include<shlwapi.h>#include<iomanip>#include<stdio.h>#pragmacomment(lib,“shlwapi.lib“)//以可讀方式對用戶顯示保護(hù)的關(guān)心方法//保護(hù)標(biāo)記表示允許應(yīng)用程序?qū)?nèi)存進(jìn)展訪問的類型//以及操作系統(tǒng)強(qiáng)制訪問的類型inlineboolTestSet(DWORDdwTarget,DWORDdwMask){return((dwTarget&dwMask)==dwMask);}#defineSHOWMASK(dwTarget,type)\if(TestSet(dwTarget,_##type))\{std::cout<<“,“<<#type;}voidShowProtection(DWORDdwTarget){SHOWMASK(dwTarget,READONLY);SHOWMASK(dwTarget,GUARD);SHOWMASK(dwTarget,NOCACHE);SHOWMASK(dwTarget,READWRITE);SHOWMASK(dwTarget,WRITECOPY);SHOWMASK(dwTarget,EXECUTE);SHOWMASK(dwTarget,EXECUTE_READ);SHOWMASK(dwTarget,EXECUTE_READWRITE);SHOWMASK(dwTarget,EXECUTE_WRITECOPY);SHOWMASK(dwTarget,NOACCESS);}//遍歷整個(gè)虛擬內(nèi)存并對用戶顯示其屬性的工作程序的方法voidWalkVM(HANDLEhProcess){//首先,獲得系統(tǒng)信息SYSTEM_INFOsi;::ZeroMemory(&si,sizeof(si));::GetSystemInfo(&si);//安排要存放信息的緩沖區(qū)MEMORY_BASIC_INFORMATIONmbi;::ZeroMemory(&mbi,sizeof(mbi));//循環(huán)整個(gè)應(yīng)用程序地址空間LPCVOIDpBlock=(LPVOID)si.lpMinimumApplicationAddress;while(pBlock<si.lpMaximumApplicationAddress){//獲得下一個(gè)虛擬內(nèi)存塊的信息if(::VirtualQueryEx(hProcess, //相關(guān)的進(jìn)程pBlock, //開頭位置&mbi, //緩沖區(qū)sizeof(mbi))==sizeof(mbi)) //大小確實(shí)認(rèn){//計(jì)算塊的結(jié)尾及其大小LPCVOIDpEnd=(PBYTE)pBlock+mbi.RegionSize;TCHARszSize[MAX_PATH];::StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH);//顯示塊地址和大小std::cout.fill(”0”);std::cout<<std::hex<<std::setw(8)<<(DWORD)pBlock<<“-“<<std::hex<<std::setw(8)<<(DWORD)pEnd<<(::strlen(szSize)==7?“(“:“(“)<<szSize<<“)“;//顯示塊的狀態(tài)switch(mbi.State){caseMEM_COMMIT:std::cout<<“Committed“;break;caseMEM_FREE:std::cout<<“Free“;break;caseMEM_RESERVE:std::cout<<“Reserved“;break;}//顯示保護(hù)if(mbi.Protect==0&&mbi.State!=MEM_FREE){mbi.Protect=_READONLY;}ShowProtection(mbi.Protect);//顯示類型switch(mbi.Type){caseMEM_IMAGE:std::cout<<“,Image“;break;caseMEM_MAPPED:std::cout<<“,Mapped“;break;caseMEM_PRIVATE:std::cout<<“,Private“;break;}//檢驗(yàn)可執(zhí)行的影像TCHARszFilename[MAX_PATH];if(::GetModuleFileName((HMODULE)pBlock, //實(shí)際虛擬內(nèi)存的模塊句柄szFilename, //完全指定的文件名稱MAX_PATH)>0) //實(shí)際使用的緩沖區(qū)大小{//除去路徑并顯示::PathStripPath(szFilename);std::cout<<“,Module:“<<szFilename;}std::cout<<std::endl;//移動塊指針以獲得下一個(gè)塊pBlock=pEnd;}}}voidmain{//遍歷當(dāng)前進(jìn)程的虛擬內(nèi)存::WalkVM(::GetCurrentProcess);getchar;}編譯后,運(yùn)行結(jié)果如以下圖:、可選試驗(yàn)虛擬內(nèi)存的操作:的很小多一局部〔千分之一〕并加以利用。步驟一:進(jìn)入WindowsXP。步驟二:進(jìn)入MicrosoftVisualStudioC++6.02.cpp。步驟四:將下面的程序源代碼輸入。步驟五:單擊BuildCompile1.cpp,并單擊“是”按鈕。步驟六:假設(shè)沒有錯(cuò)誤,則單擊“執(zhí)行”按鈕,即可看到結(jié)果。輸入以下源代碼:#include<windows.h>#include<iostream>#include<stdio.h>//嘗試以指定長度的零數(shù)字填充內(nèi)存塊的簡便方法voidFillZero(LPVOIDpBlock,DWORDdwSize){_try{BYTE*arFill=(BYTE*)pBlock;for(DWORDdwFill=0;dwFill<dwSize;++dwFill){arFill[dwFill]=0;}std::cout<<“Memoryzeroed.“<<std::endl;}_except(EXCEPTION_EXECUTE_HANDLER){std::cout<<“Couldnotzeromemory.“<<std::endl;}}voidmain{//簡潔的常數(shù)DWORDc_dwGigabyte=1<<30;//1GB塊{LPVOIDpBlock=::malloc(c_dwGigabyte);::FillZero(pBlock,c_dwMegabyte);::free(pBlock);}//1GB{LPVOIDpBlock=::VirtualAlloc(NULL, //不指定起始地址c_dwGigabyte, //要求1GBM

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論