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

下載本文檔

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

文檔簡(jiǎn)介

成鰭.

③43?摟網(wǎng)二丈孝

實(shí)驗(yàn)報(bào)告

課程名稱:操作系統(tǒng)

實(shí)驗(yàn)項(xiàng)目:windows進(jìn)程管理

姓名:

專計(jì)算機(jī)科學(xué)與技術(shù)

業(yè):

班級(jí):

學(xué)號(hào):

計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院

計(jì)算機(jī)系

2023年4月23日

實(shí)驗(yàn)項(xiàng)目名稱:Windows進(jìn)程管理____________________

一、實(shí)驗(yàn)?zāi)康?/p>

1.學(xué)習(xí)windows系統(tǒng)提供的線程創(chuàng)建、線程撤消、線程同步等系統(tǒng)調(diào)用;

2.運(yùn)用C++實(shí)現(xiàn)線程創(chuàng)建、線程撤消、線程同步程序;

3.完畢思考、設(shè)計(jì)與練習(xí)。

二、實(shí)驗(yàn)用設(shè)備儀器及材料

1.Windows7或10,VS2023及以上版本。

三、實(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()

線程撤消:ExitThread()

線程終止:ExitThread(0)

線程掛起:SleepO

關(guān)閉句柄:Closellandle()

參考代碼:

//OS-TEST,cpp:定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。

//

#include"stdafx.h〃

#inc1ude”O(jiān)S-TEST.hn

#ifdef_DEBUG

#definenewDEBUGNEW

#endif

//唯一的應(yīng)用程序?qū)ο?/p>

CWinApptheApp;

usingnamespacestd;

voidThreadName1();

inttmain(intargc,TCHAR*argv[],TCHAR*envp[])

(

?>intnRetCode=0;

staticHANDLEhHandlel=NULL;

DWORDdwThreadID1;

HMODULEhModule=::GetModuleHandle(NULL);

oif(hModule!=NULL)

°(

“/初始化MFC并在失敗時(shí)顯示錯(cuò)誤

if(!AfxWinInit(hModule,NULL,::GetCommandLineO,0))

°(

。//TODO:更改錯(cuò)誤代碼以符合您的需要

。_tprintf(_T(〃錯(cuò)誤:MFC初始化失敗\n〃));

?onRetCode=1;

)

1se

d(

。//TODO:在此處為應(yīng)用程序的行為編寫代碼。

)

else

。//TODO:更改錯(cuò)誤代碼以符合您的需要

_tprintf(_T("錯(cuò)誤:GetModuleHandle失敗\n"));

。nRetCode=1;

)

hHand1el=CreateThread((LPSECURITY_ATTRIBUTES)NULL,

M),

3(LPTHREAD_START_R0UTINE)ThreadName1,

。。。(LPVOID)NULL,

?0,

。必&dwThreadID1);

SIeep(5000);

Closelland1e(hHandle1);

ExitThread(0);

。//getchar();

returnnRetCode;

)

voidThreadName1()

(

printf("Hello,ThisisaThread./z);

)

運(yùn)營(yíng)結(jié)果如圖所示。

■選擇D:\cpp\OS-TEST\Debug\OS-TEST.exe

Hello,ThisisaThread.

完畢以下設(shè)計(jì)題目:

1.向線程相應(yīng)的函數(shù)傳遞參數(shù),如字符串“helloworld!”,在線程中顯示。

2.如何創(chuàng)建3個(gè)線程A,B,C,并建立先后序執(zhí)行關(guān)系A(chǔ)-B-C。

實(shí)驗(yàn)內(nèi)容2線程同步

完畢父線程和子線程的同步。父線程創(chuàng)建子線程后進(jìn)入阻塞狀態(tài),子線程運(yùn)營(yíng)完畢后再喚醒。

相關(guān)系統(tǒng)調(diào)用:

等待對(duì)象WaitForSing1eObject(),WaitForMultipleObjects();

信號(hào)量對(duì)象CreateSemaphore(),OpenSemaphore(),ReieaseSemaphore();

HANDLEWINAPICreateSemaphore(

_In_opt_LPSECURITY_ATTRIBUTESIpSemaphoreAttributes

_In_LONGIInitia1Count,

_In_LONGIMaximumCount,

_In_opt_LPCTSTRIpName

);

第一個(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)。

//

#include〃stdafx.h〃

#include'0S-TEST.h"

ttifdef_DEBUG

#definenewDEBUG_NEW

#endif

//唯一的應(yīng)用程序?qū)ο?/p>

CWinApptheApp;

usingnamespacestd;

//voidThreadName1();

staticHANDLEhl;

staticHANDLEhHandle1=NULL;

voidfunc();

int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])

(

intnRetCode=0;

DWORDdwThreadIDl;

?DWORDdRes,err;

o//LPCWSTR1PCWSTR=MSemaphoreNamel";

//hHandle1=CreateSemaphore(NULL,0,1,NULL);//CREATEASEMAPHORE

hHand1el=CreateSemaphore(NULL,0,1,Lz,SemaphoreName1?,);//CREATEASEMAP

HORE

if(hHand1e1==NULL)printf(nSemaphoreereateERR!\n");

?>elseprintf(z,Semaphorecreatesuccess!\n〃);

hHandle1=0penSemaphore(SYNCHRONIZE|SEMAPH0RE_M0DIFY_STATE,

ooooNULL,

aarSemaphoreNamel,z);//OPENSEMAPHORE

。if(hHandlel==NULL)printf(〃SemaphoreopenERR!\n〃);

oelseprintf("Semaphoreopensuecess!\n〃);

hl=CreateThread((LPSECUR1TY_ATTRIBUTES)NULL,

0000,

ooo(LPTHREAD_START_R0UTINE)func,

。(LPVOID)NULL,

。ooO,

b&dwThreadIDl);//CREATECHILDTHREAD

if(h1==NULL)printf(,zThreadcreateERR!\n〃);

eIseprintf("Threadcreatesuccess!\n〃);

^dRes=WaitForSing1eObject(hHandlel,INFINITE);//WAITFORCHILDT1IR

EADEND

?err=GetLastError();

printf(〃Waitforsing1eobjectERR=%d\n,z,err);

oif(dRes==WAIT_TIMEOUT)printfCTIMEOUTOFdRes=%d\n〃,dRes);

oeIseif(dRes=WAIT_OBJECT_O)printfCWAIT_0BJECTdRes=%d\n,z,dRe

s);

也Iseif(dRes=WAIT.ABANDONED)printf(zzWAIT_ABANDONEDdRes二%d\n〃,dRes);

?elseprintf(z,dRes=%d\n”,dRes);

?>C1oseHandie(hl);

£1oseHand1e(hHand1el);

ExitThread(0);

oreturnnRetCode;

)

voidfunc0

(

。B00Lrc;

DW0RDerr;

printf("NowinThread.\n");

?rc=ReleaseSemaphore(hHandle1,1,NULL);

err=GetLastError();

eprintf("Re1easeSemaphoreerr=%d\n,z,err);

?if(rc=0)printf(Z/SemaphoreReleaseFai1.\n〃);

elseprintf("SemaphoreReleaseSuccess.rc=%d\n〃,rc);

)

編譯運(yùn)營(yíng),結(jié)果如圖所示。

■辭D:\cpp\OS-TEST\Debug\OS-TEST.exe

Semaphorecreatesuccess!

Semaphoreopensuccess!

Threadcreatesuccess!

NowinThread.

ReleaseSemaphoreerr=0

WaitforsingleobjectERR=0

SemaphoreReleaseSuccess.rc=l

dRes=0

完畢以下設(shè)計(jì)題目:

3.用信號(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)容1

1.向線程相應(yīng)的函數(shù)傳遞參數(shù),如字符串“helloworId!”,在線程中顯示。

結(jié)果:

EE:\users\mzyli\documents\visualstudio2010\Projects\66645\D...—□X

Hello,World.

//66645.cpp:定]§義°?控?制?臺(tái)F§應(yīng)?|用@?程、序,…的i?入“?口“2點(diǎn)i?。博

#inc1ude"stdafx.h

^include”66645.h”

#ifdef_DEBUG

UdefinenewDEBUG_NEW

#endif

//唯i§—°?的1?應(yīng)?|用??程"r序,一對(duì)?象"?

CWinApptheApp;

usingnamespacestd;

voidThreadNamel();

inttmain(intargc,TCHAR*argv[],TCHAR*envp[])

。intnRetCode=0;

staticHANDLEhHandle1=NULL;

。DWORDdwThreadIDl;

。HMODULEhModu1e=::GetModuleHand1e(NULL);

。if(hModule!=NULL)

(

。//初?始°?化[¥MEC并在f失。ji敗々r時(shí)。1人顯?示。?錯(cuò)「a誤??

oif(!AfxWininit(hModu1e,NULL,::GetCommandLine(),0))

0o{

。//TODO:更“'改?錯(cuò)a誤"?代2碼?以。?符0?合?您“2的i?需““要。a

。_tprintf(_T("錯(cuò)iC"誤"?:MFC初?始"?化]¥失'i敗3\n"));

。onRetCode=1;

selse

。(

。//TODO:在一此總?處芨I為@應(yīng)?|用??程?■「序一的i?行D為a編A-0寫i笈代父2碼?一倉

°}

°}

。else

。(

//TODO:更r改?錯(cuò)Va誤代v2碼?以。?符口?合?您”2的]?需?一?要。a

_tprintf(_T("錯(cuò)iia誤"?:GetModuleHandie失。ii敗豆=\n"));

。nRetCode=1;

。hHandlel=CreateThread((LPSECURITY_ATTRIBUTES)NULL,

00030,

。。。。(LPTHREAD_START_R0UTINE)ThreadNamel,

-。(LPVOID)NULL,

0000,

。。。&dwThreadID1);

S1eep(5000);

CloseHand1e(hHandle1);

。ExitThread(0);

a

//getchar();

returnnRetCode;

)

voidThreadName1()

{

。printf(,ZHe1lo,WorId.");

2.如何創(chuàng)建3個(gè)線程A,B,C,并建立先后序執(zhí)行關(guān)系A(chǔ)-BfC。

■3i^E:\users\mzy^documents\visualstudio2010\Projects\147589\Debug\147589.exe□X

hello,ThisisaThreadA.

[ThisisaThreadB.

[ThisisaThreadC.

//147589.cpp:定[§義。?控?制?臺(tái)F§應(yīng)@|用??程..「序”的1?入”?口”2點(diǎn)也送

//

#include"stdafx.h,z

^include"147589.h〃

#ifdef_DEBUG

#definenewDEBUG,NEW

#endif

//唯i§一°?的i?應(yīng)?|用??程"r序?一對(duì)?象

CWinApptheApp;

usingnamespacestd;

voidThreadName1();

voidThreadName2();

voidThreadName3();

staticHANDLEhl;

staticHANDLEh2;

staticHANDLEh3;

staticHANDLEhHandlel=NULL;

staticHANDLEhHandle2=NULL;

staticIIANDLEhHandle3=NULL;

int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])

(

。intnRetCode=0;

staticHANDLEhHandlel=NULL;

。staticHANDLEhHandle2=NULL;

。staticHANDLEhHand1e3=NULL;

DWORDdwThreadIDl;

HMODULEhModu1e二::GetModu1eHand1e(NULL);

if(hModule!二NULL)

(

//初?始°?化[¥MFC并i6在?.2失。ji敗丁?時(shí)。jA顯?示。?錯(cuò)丁a誤,??

。if(!AfxWinlnit(hModule,NULL,::GetCommandLine(),0))

0o(

…//TODO:更r改?錯(cuò)曠a誤"?代『2碼?以。?符0?合?您“2的i?需““要。a

。_tprintf(_T("錯(cuò)誤”?:MFC初?始。?化[¥失。門敗宮"I\n"));

。nRetCode=1;

。else

(

。。//TODO:在“2此a?處保為a應(yīng)?用??程序”’的。行D為a編寫速代廠2碼?.jg

0Of

)

else

(

。?!═ODO:更一改?錯(cuò)A“a誤"?代「2碼?以。?符0?合?您,,2的i?需?一?要。a

。。_tprintf(_T(〃錯(cuò)4''一誤_?:GetModu1eHandle失。ji敗"r\n"));

。。nRetCode=1;

}

//?charstr[]="heIloworld!e?";

hHand1el=CreateThread((LPSECURITY_ATTRIBUTES)NULL,

°°0,

。(LPTHREAD_START_ROUTINE)ThreadName1,

。(LPVOID)NULL,

。//(LPVOID)str,

。0,

&dwThreadIDl);

//Sleep(5000);

hHandle2=CreateThread((LPSECURITY_ATTRIBUTES)NULL,

。0,

。。(LPTHREAD_START_ROUTINE)ThreadName2,

。(LPVOID)NULL,

0,

。&dwThreadlD1);

。//SIeep(5000);

/AC1oseHandle(hHandle1);

hHandle3=CreateThread((LPSECURITY_ATTRIBUTES)NULL,

o0,

o(LPTHREAD_START_R0UTINE)ThreadName3,

(LPVOID)NULL,

0,

&dwThreadlDl);

。S1eep(1000);

〃。C1oseHandle(hllandle2);

C1oseHandle(hHandle3);

Closellandle(hlland1e2);

CloseHandle(hHandle1);

ExitThread(0);

。//getchar();

。returnnRetCode;

}

voidThreadNamel()

(

pr1ntf(MHei1o,ThisisaThreadA.\n");

。//printf('%s",str);

voidThreadName2()

。printf("ThisisaThreadB.\n");

)

voidThreadName3()

(

printf(nThisisaThreadC.\n");

)

實(shí)驗(yàn)內(nèi)容2

2.用信號(hào)量控制實(shí)現(xiàn)3個(gè)線程的同步,線程A釋放信號(hào)量后執(zhí)行B,B釋放信號(hào)量后執(zhí)行C。

SemaphoreReleaseSuccess.rc=l

'eleaseSemaphoreerr=0

【aitforsingleobjectERR=0

lRes=0

lowinThread.

Semaphorecreatesuccess!

iemaphoreopensuccess!

,hreadcreatesuccess!

:eleaseSemaphoreerr=0

ieinaphoreReleaseSuccess.rc=l

'aitforsingleobjectERR=0

lRes=0

fowinThread.

Semaphorecreatesuccess!

iemaphoreopensuccess!

'hreadcreatesuccess!

S3E:\users\mzyli\documents\visualstudio2010\Projects\1234569\Debug\1234569.exe

ISemaphorecreatesuccess!

JSemaphoreopensuccess!

*Threadcreatesuccess!

8NowinThread.

ReleaseSemaphoreerr=0

'aitforsingleobjectERR=0

SemaphoreReleaseSuccess.rc=l

IlRes=0

//1234569.cpp:定i§義°?控?制?臺(tái)F§應(yīng)?|用@?程”一序.…的1?入”?口亡點(diǎn),

//

Sinclude"stdafx.h"

include”1234569.h〃

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

//唯i§一°?的V?應(yīng)?|用??程"r序,…對(duì)?象"?

CWinApptheApp;

usingnamespacestd;

staticHANDLEhl;

staticHANDLEh2;

staticHANDLEh3;

staticHANDLEhHandlei=NULL;

staticHANDLEhHand1e2=NULL;

staticHANDLEhHandle3=NULL;

voidfunc();

voidfund();

voidfune();

int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])

(

intnRetCode=0;

DWORDdwThreadID1;

DW0RDdRes,err;

。//LPCWSTR1PCWSTR=nSemaphoreNamel";

//hHandle1=CreateSemaphore(NULL,0,1,NULL);//CREATEASEMAPHORE

。hHandlel=CreateSemaphore(NULL,0,1,L^SemaphoreName1");//CREATEASEMAPH

ORE

。if(hHandle1=NULL)printfCzSemaphorecreateERR!\n〃);

elseprintf("Semaphorecreatesuccess!\n");

。hHandle1=OpenSemaphore(SYNCHRONTZEISEMAPHOREMODIFY__STATE,NULL,L'SemaphoreN

amelH;//OPENSEMAPHORE

if(hHandlei==NULL)printf(''SemaphoreopenERR!\nz,);

。elseprintf("Semaphoreopensuccess!\n");

ohl=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_R

OUTINE)func,(LPVOTD)NULL,0,&dwThreadID1);//CREATECHILDTIIREAD

aif(h1==NULL)printf(MThreadcreateERR!\n");

。elseprintf(z,Threadcreatesuccess!\n,z);

。dRes=WaitForSingleObject(hilandlel,INFINITE);//WAITFORCHILDTHREADEND

。err=GetLastError0;

。printf(z,Waitforsing1eobjectERR=%d\n”,err);

if(dRes==WAIT_TIME0UT)printfCT1ME01TOFdRes=%d\nz,,dRes);

。elseif(dRes=WAIT_0BJECT_0)printf(Z,WAIT_OBJECTdRes二%d\n〃,dRes);

elseif(dRes==WAIT_ABANDONED)printfCWA!T_ABANDONEDdRes=%d\n",dRes);

e1seprintf(〃dRes二%d\n〃,dRes);

C1oseHandle(hl);

。CloseHandle(hHandle1);

hflandle2=CreateSemaphore(NULL,0,1,L"SemaphoreName2");//CREATEASEMAPH

ORE

if(hHand1e2==NULL)printf("SemaphorecreateERR!\n");

elseprintf(11Semaphorecreatesuccess!\n〃);

ohHandle2=0penSemaphore(SYNCHRONIZEISEMAPH0RE_M0DIFY_STATE,NULL,L'Sem

aphoreName2z/);//OPENSEMAPliORE

。if(hHand1e2==NULL)printf(/zSemaphoreopenERR!\n");

elseprintf(''Sernaphoreopensuccess!\nz,);

h2=CreateThread((LPSECURTTYAHRIBUTES)NULL,0,(LPTHREAD.STARTROUTINE)fund,(L

PVOID)NULL,0,&dwThreadlD1);//CREATECHILDTHREAD

if(h2==NULL)printf("ThreadcreateERR!\n");

。elseprintf("Threadcreatesuccess!\n");

dRes=WaitForSingleObject(hHandle2,INFINITE);//WAITFORCHILDTHREADEND

。err=GetLastError();

printf(?,WaitforsingleobjectERR=%d\n”,err);

z,

if(dRes==WAIT_TIMEOUT)printf(T1MEOUTOFdRes二%d\n”,dRes);

eIseif(dRes=WAIT_0BJECT_0)printfCWAIT_OBJECTdRes=%d\n,z,dRes);

elseif(dRes==WAIT_ABANDONED)printfCWA1T_ABANDONEDdRes=%d\nz/,dRes);

elseprintf(〃dRes=%d\n,\dRes);

。CloseHandle(h2);

oCloseHandle(hHand1e2);

hHand1e3=CreateSemaphore(NULL,0,1,L11SemaphoreName3/Z);//CREATEASEMA

PHORE

z,

if(hHandle3—NULL)printf(SemaphorecreateERR!\n〃);

elseprintf("Semaphorecreatesuccess!\n,z);

hilandle3=OpenSemaphore(SYNCUR0NIZE|SEMAPHORE_MODIFY_STATE,NULL,L'Semaph

oreName3M;//OPENSEMAPHORE

,z

if(hHandle3二二NULL)printf(SemaphoreopenERR!\n");

elseprintf("Semaphoreopensuccess!\n");

h3=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTI

NE)fune,(LPVOID)NULL,0,&dwThreadTD1);//GREATECIIILDTHREAD

?if(h3==NULL)printf("ThreadcreateERR!\n");

elseprintf("Threadcreatesuccess!\n,z);

dRes二WaitForSingleObject(hHandle3,TNFINITE);//WATTFORCHILDTHREAD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論