windows進(jìn)程管理實(shí)驗(yàn)報(bào)告_第1頁
windows進(jìn)程管理實(shí)驗(yàn)報(bào)告_第2頁
windows進(jìn)程管理實(shí)驗(yàn)報(bào)告_第3頁
windows進(jìn)程管理實(shí)驗(yàn)報(bào)告_第4頁
windows進(jìn)程管理實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、成績:實(shí)驗(yàn)報(bào)告操作系統(tǒng)windows進(jìn)程管理計(jì)算機(jī)科學(xué)與技術(shù)課程名稱:實(shí)驗(yàn)項(xiàng)目姓名:專業(yè):班級(jí):學(xué)號(hào):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院計(jì)算機(jī)系2019年4月23日實(shí)驗(yàn)項(xiàng)目名稱:windows進(jìn)程管理、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)windows系統(tǒng)提供的線程創(chuàng)建、線程撤銷、線程同步等系統(tǒng)調(diào)用;利用C+實(shí)現(xiàn)線程創(chuàng)建、線程撤銷、線程同步程序;完成思考、設(shè)計(jì)與練習(xí)。二、實(shí)驗(yàn)用設(shè)備儀器及材料Windows7或10,VS2010及以上版本。三、實(shí)驗(yàn)內(nèi)容1線程創(chuàng)建與撤銷寫一個(gè)windows控制臺(tái)程序(需要MFC),創(chuàng)建子線程,顯示Hello,ThisisaThread.然后撤銷該線程。相關(guān)系統(tǒng)調(diào)用:線程創(chuàng)建:CreateThread(

2、)線程撤銷:ExitThread()線程終止:ExitThread(0)線程掛起:Sleep()關(guān)閉句柄:CloseHandle()參考代碼:/OS-TEST.cpp:定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/#includestdafx.h#includeOS-TEST.h#ifdef_DEBUG#definenewDEBUG_NEW#endif/唯一的應(yīng)用程序?qū)ο驝WinApptheApp;usingnamespacestd;voidThreadName1();int_tmain(intargc,TCHAR*argv,TCHAR*envp)intnRetCode=0;staticHANDLEhHand

3、le1=NULL;DWORDdwThreadID1;HMODULEhModule=:GetModuleHandle(NULL);if(hModule!=NULL)/初始化MFC并在失敗時(shí)顯示錯(cuò)誤if(!AfxWinInit(hModule,NULL,:GetCommandLine(),0)/TODO:更改錯(cuò)誤代碼以符合您的需要_tprintf(_T(錯(cuò)誤:MFC初始化失敗n);nRetCode=1;else/TODO:在此處為應(yīng)用程序的行為編寫代碼。else/TODO:更改錯(cuò)誤代碼以符合您的需要_tprintf(_T(錯(cuò)誤:GetModuleHandle失敗n);nRetCode=1;hHan

4、dle1=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID)NULL,0,&dwThreadID1);Sleep(5000);CloseHandle(hHandle1);ExitThread(0);/getchar();returnnRetCode;voidThreadNamel()printf(Hello,ThisisaThread.);運(yùn)行結(jié)果如圖所示。E!cppOS-TESTADebugXOS-TEST.eateHello,ThisisaThread.完成以下設(shè)計(jì)題目

5、:向線程對應(yīng)的函數(shù)傳遞參數(shù),如字符串“helloworld!”,在線程中顯示。如何創(chuàng)建3個(gè)線程A,B,C,并建立先后序執(zhí)行關(guān)系A(chǔ)-BC。實(shí)驗(yàn)內(nèi)容2線程同步完成父線程和子線程的同步。父線程創(chuàng)建子線程后進(jìn)入阻塞狀態(tài),子線程運(yùn)行完畢后再喚醒。相關(guān)系統(tǒng)調(diào)用:等待對象WaitForSingleObject().WaitForMultipleObjects();信號(hào)量對象CreateSemaphore(),OpenSemaphore(),ReleaseSemaphore();HANDLEWINAPICreateSemaphore(_In_opt_LPSECURITY_ATTRIBUTESlpSemapho

6、reAttributes_In_LONGllnitialCount,_In_LONGlMaximumCount,_In_opt_LPCTSTRlpName);第一個(gè)參數(shù):安全屬性,如果為NULL則是默認(rèn)安全屬性第二個(gè)參數(shù):信號(hào)量的初始值,要=0且=第三個(gè)參數(shù)第三個(gè)參數(shù):信號(hào)量的最大值第四個(gè)參數(shù):信號(hào)量的名稱返回值:指向信號(hào)量的句柄,如果創(chuàng)建的信號(hào)量和已有的信號(hào)量重名,那么返回已經(jīng)存在的信號(hào)量句柄參考代碼:/OS-TEST.cpp:定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/#includestdafx.h#includeOS-TEST.h#ifdef_DEBUG#definenewDEBUG_NEW#end

7、if/唯一的應(yīng)用程序?qū)ο驝WinApptheApp;usingnamespacestd;/voidThreadName1();staticHANDLEh1;staticHANDLEhHandle1=NULL;voidfunc();int_tmain(intargc,TCHAR*argv,TCHAR*envp)intnRetCode=0;DWORDdwThreadID1;DWORDdRes,err;/LPCWSTRlPCWSTR=SemaphoreName1;/hHandle1=CreateSemaphore(NULL,0,1,NULL);/CREATEASEMAPHOREhHandle1=Cr

8、eateSemaphore(NULL,0,1,LSemaphoreName1);/CREATEASEMAPHOREif(hHandle1=NULL)printf(SemaphorecreateERR!n);elseprintf(Semaphorecreatesuccess!n);hHandle1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL,LSemaphoreName1);/OPENSEMAPHOREif(hHandle1=NULL)printf(SemaphoreopenERR!n);elseprintf(Semaphoreop

9、ensuccess!n);h1=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func,(LPVOID)NULL,0,&dwThreadIDl);/CREATECHILDTHREADif(h1=NULL)printf(ThreadcreateERR!n);elseprintf(Threadcreatesuccess!n);dRes=WaitForSingleObject(hHandle1,INFINITE);/WAITFORCHILDTHREADENDerr二GetLastError();printf(Wai

10、tforsingleobjectERR=%dn,err);辻(dRes=WAIT_TIMEOUT)printf(TIMEOUTOFdRes=%dn,dRes);elseif(dRes=WAIT_OBJECT_O)printf(WAIT_OBJECTdRes=%dn,dRes);else辻(dRes=WAIT_ABANDONED)printf(WAIT_ABANDONEDdRes=%dn,dRes);elseprintf(dRes=%dn,dRes);CloseHandle(h1);CloseHandle(hHandle1);ExitThread(0);returnnRetCode;voidfu

11、nc()BOOLrc;DWORDerr;printf(NowinThread.n);rc=ReleaseSemaphore(hHandle1,1,NULL);err=GetLastError();printf(ReleaseSemaphoreerr=%dn,err);if(rc=0)printf(SemaphoreReleaseFail.n);elseprintf(SemaphoreReleaseSuccess.rc=%dn,rc);編譯運(yùn)行,結(jié)果如圖所示。DAcppXOS-TESTXC-ebugXOS-TEST.exeSeinaphorecreatesuccess!fceinaphoreop

12、ensuccess!Threadcreatesuccess!inThread.aitforsingleobject.ERR-0SeinaphoreReleas已Success,rc-1dRss-0easeSemaphaxeerr-Q完成以下設(shè)計(jì)題目:用信號(hào)量控制實(shí)現(xiàn)3個(gè)線程的同步,線程A釋放信號(hào)量后執(zhí)行B,B釋放信號(hào)量后執(zhí)行C。四、實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)內(nèi)容11.向線程對應(yīng)的函數(shù)傳遞參數(shù),如字符串“helloworld!”,在線程中顯示。結(jié)果:rt=:t.ijrnUTTr.T./66645.cpp:定!義。?控?制?臺(tái)F應(yīng)丨用血?程-序的I?.入?口2點(diǎn)1?。達(dá)/#includestdafx.h#inc

13、lude66645.h#ifdef_DEBUG#definenewDEBUG_NEW#endif/唯i?的1?應(yīng)|用血?程-序?qū)?象CWinApptheApp;usingnamespacestd;voidThreadName1();int_tmain(intargc,TCHAR*argv,TCHAR*envp)intnRetCode=0;staticHANDLEhHandle1=NULL;DWORDdwThreadID1;HMODULEhModule=:GetModuleHandle(NULL);if(hModule!=NULL)/初?始?化匚MFC并迸在s失“敗廠1時(shí)二入顯?示?錯(cuò)玄誤if(

14、!AfxWinInit(hModule,NULL,:GetCommandLine(),0)/TODO:更-1改?錯(cuò)aa誤、代a2碼?以。?符0?合?您“的?需要。a_tprintf(_T(錯(cuò)a誤:MFC初?始?化匚失“敗ain);nRetCode=1;else/TODO:在2此a?處a|為&應(yīng)丨用?程-序。的1?行D為a編AO寫ia代a碼?。達(dá)else/TODO:更1改?錯(cuò)aa誤代a2碼?以。?符。?合?您2的?需要a_tprintf(_T(錯(cuò)aa誤:GetModuleHandle失ii敗ain);nRetCode=1;hHandle1=CreateThread(LPSECURITY_ATTR

15、IBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID)NULL,0,&dwThreadID1);Sleep(5000);CloseHandle(hHandle1);ExitThread(0);/getchar();returnnRetCode;voidThreadName1()printf(Hello,World.);如何創(chuàng)建3個(gè)線程A,B,C,并建立先后序執(zhí)行關(guān)系A(chǔ)-B-CoJE:usersmzylidDCLimentevisualstudio2010Projects1475B9Debug1475B9.exemllo,Thisis

16、aThreadA.LTnisisaThreadB.TiibJsaThreadC./147589.cpp:定!義。?控?制?臺(tái)F應(yīng)丨用?程J序的I?入?口2點(diǎn)1?。達(dá)/#includestdafx.h#include147589.h#ifdef_DEBUG#definenewDEBUG_NEW#endif/唯i?的I?應(yīng)|用血?程-序?qū)?象CWinApptheApp;usingnamespacestd;voidThreadName1();voidThreadName2();voidThreadName3();staticHANDLEh1;staticHANDLEh2;staticHANDLEh3

17、;staticHANDLEhHandle1=NULL;staticHANDLEhHandle2=NULL;staticHANDLEhHandle3=NULL;int_tmain(intargc,TCHAR*argv,TCHAR*envp)intnRetCode=0;staticHANDLEhHandle1=NULL;staticHANDLEhHandle2=NULL;staticHANDLEhHandle3=NULL;DWORDdwThreadID1;HMODULEhModule=:GetModuleHandle(NULL);if(hModule!=NULL)/初?始?化匚MFC并迸在s失“敗

18、廠1時(shí)二入顯?示?錯(cuò)玄誤if(!AfxWinInit(hModule,NULL,:GetCommandLine(),0)/TODO:更-1改?錯(cuò)aa誤、代a2碼?以。?符0?合?您“的?需要。a_tprintf(_T(錯(cuò)a誤:MFC初?始?化匚失“敗ain);nRetCode=1;else/TODO:在2此a?處a|為&應(yīng)丨用?程-序。的1?行D為a編AO寫ia代a碼?。達(dá)else/TODO:更1改?錯(cuò)aa誤代a2碼?以。?符。?合?您2的?需要a_tprintf(_T(錯(cuò)a玄誤:GetModuleHandle失il敗玄in);nRetCode=1;/charstr=helloworld!e?

19、;hHandle1=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID)NULL,/(LPVOID)str,0,&dwThreadID1);/Sleep(5000);hHandle2=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName2,(LPVOID)NULL,0,&dwThreadID1);/Sleep(5000);/CloseHandle(hHandle1);hHand

20、le3=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName3,(LPVOID)NULL,0,&dwThreadID1);Sleep(1000);/CloseHandle(hHandle2);CloseHandle(hHandle3);CloseHandle(hHandle2);CloseHandle(hHandle1);ExitThread(0);/getchar();returnnRetCode;voidThreadName1()printf(Hello,ThisisaThreadA.n);

21、/printf(%s,str);voidThreadName2()printf(ThisisaThreadB.n);voidThreadName3()printf(ThisisaThreadC.n);實(shí)驗(yàn)內(nèi)容22.用信號(hào)量控制實(shí)現(xiàn)3個(gè)線程的同步,線程A釋放信號(hào)量后執(zhí)行B,B釋放信號(hào)量后執(zhí)行C。BlE:u&ers.mzyIidocumentsvisuaIstudio2010Projects1234569Debg1234569.exesuccess!ISemaphorecreatesuccess!SemaphoreopenThreadcreatesuccess!的口評(píng)inThreadKelease

22、Semaphoreerr=0ffaitforsingleobjectERR=OjSemaphore|dRes=OISemaphoreSemaphoreThreadcreateNowinThread.ReleaseSemaphoreerr=0SemaphoreReleaseSuccess.rc=1曲itforsingleobjectERR=OdRes=OSemaphorecreatesuccess!SemaphoreopenThreadcreate:WowinThread.ReleaseSemaphoreerr=0曲itforsingleobjectERR=OdRes=OSemaphoreRel

23、easeSuccess.rc=1ReleaseSuccess.rc=1createsuccess!opensuccess!success!.success!success!TraC1ti十iar+infifFrUitar+/1234569.cpp:定!義。?控?制?臺(tái)-j應(yīng)丨用?程-序-的I?入?口2點(diǎn)I?oie/#includestdafx.h#include1234569.h#ifdef_DEBUG#definenewDEBUG_NEW#endif/唯i?的1?應(yīng)|用血?程-序?qū)?象CWinApptheApp;usingnamespacestd;staticHANDLEh1;staticH

24、ANDLEh2;staticHANDLEh3;staticHANDLEhHandle1=NULL;staticHANDLEhHandle2=NULL;staticHANDLEhHandle3=NULL;voidfunc();voidfund();voidfune();int_tmain(intargc,TCHAR*argv,TCHAR*envp)intnRetCode=0;DWORDdwThreadID1;DWORDdRes,err;/LPCWSTRlPCWSTR=SemaphoreName1;/hHandle1=CreateSemaphore(NULL,0,1,NULL);/CREATEAS

25、EMAPHOREhHandle1=CreateSemaphore(NULL,0,1,LSemaphoreName1);/CREATEASEMAPHOREif(hHandle1=NULL)printf(SemaphorecreateERR!n);elseprintf(Semaphorecreatesuccess!n);hHandle1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL,LSemaphoreName1);/OPENSEMAPHOREif(hHandle1=NULL)printf(SemaphoreopenERR!n);els

26、eprintf(Semaphoreopensuccess!n);h1=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func,(LPVOID)NULL,0,&dwThreadID1);/CREATECHILDTHREADif(h1=NULL)printf(ThreadcreateERR!n);elseprintf(Threadcreatesuccess!n);dRes=WaitForSingleObject(hHandle1,INFINITE);/WAITFORCHILDTHREADENDerr=GetLas

27、tError();printf(WaitforsingleobjectERR=%dn,err);if(dRes=WAIT_TIMEOUT)printf(TIMEOUTOFdRes=%dn,dRes);elseif(dRes=WAIT_OBJECT_0)printf(WAIT_OBJECTdRes=%dn,dRes);elseif(dRes=WAIT_ABANDONED)printf(WAIT_ABANDONEDdRes=%dn,dRes);elseprintf(dRes=%dn,dRes);CloseHandle(h1);CloseHandle(hHandle1);hHandle2=Creat

28、eSemaphore(NULL,0,1,LSemaphoreName2);/CREATEASEMAPHOREif(hHandle2=NULL)printf(SemaphorecreateERR!n);elseprintf(Semaphorecreatesuccess!n);hHandle2=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL,LSemaphoreName2);/OPENSEMAPHOREif(hHandle2=NULL)printf(SemaphoreopenERR!n);elseprintf(Semaphoreopens

29、uccess!n);h2=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)fund,(LPVOID)NULL,0,&dwThreadID1);/CREATECHILDTHREADif(h2=NULL)printf(ThreadcreateERR!n);elseprintf(Threadcreatesuccess!n);dRes=WaitForSingleObject(hHandle2,INFINITE);/WAITFORCHILDTHREADENDerr=GetLastError();printf(Waitfo

30、rsingleobjectERR=%dn,err);if(dRes=WAIT_TIMEOUT)printf(TIMEOUTOFdRes=%dn,dRes);elseif(dRes=WAIT_OBJECT_0)printf(WAIT_OBJECTdRes=%dn,dRes);elseif(dRes=WAIT_ABANDONED)printf(WAIT_ABANDONEDdRes=%dn,dRes);elseprintf(dRes=%dn,dRes);CloseHandle(h2);CloseHandle(hHandle2);hHandle3=CreateSemaphore(NULL,0,1,LS

31、emaphoreName3);/CREATEASEMAPHOREif(hHandle3=NULL)printf(SemaphorecreateERR!n);elseprintf(Semaphorecreatesuccess!n);hHandle3=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL,LSemaphoreName3);/OPENSEMAPHOREif(hHandle3=NULL)printf(SemaphoreopenERR!n);(LPVOID)NULL,0,elseprintf(Semaphoreopensuccess!n);h3=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)fune,&dwThreadID1);/CREATECHILDTHREADif(h3=NULL)printf(ThreadcreateERR!n);elseprintf(Threadcreatesuccess!n);dRes=WaitFor

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論