windows进程管理实验报告_第1页
windows进程管理实验报告_第2页
windows进程管理实验报告_第3页
windows进程管理实验报告_第4页
windows进程管理实验报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成绩:实验报告操作系统windows进程管理计算机科学与技术课程名称:实验项目姓名:专业:班级:学号:计算机科学与技术学院计算机系2019年4月23日实验项目名称:windows进程管理、实验目的学习windows系统提供的线程创建、线程撤销、线程同步等系统调用;利用C+实现线程创建、线程撤销、线程同步程序;完成思考、设计与练习。二、实验用设备仪器及材料Windows7或10,VS2010及以上版本。三、实验内容1线程创建与撤销写一个windows控制台程序(需要MFC),创建子线程,显示Hello,ThisisaThread.然后撤销该线程。相关系统调用:线程创建:CreateThread(

2、)线程撤销:ExitThread()线程终止:ExitThread(0)线程挂起:Sleep()关闭句柄:CloseHandle()参考代码:/OS-TEST.cpp:定义控制台应用程序的入口点。/#includestdafx.h#includeOS-TEST.h#ifdef_DEBUG#definenewDEBUG_NEW#endif/唯一的应用程序对象CWinApptheApp;usingnamespacestd;voidThreadName1();int_tmain(intargc,TCHAR*argv,TCHAR*envp)intnRetCode=0;staticHANDLEhHand

3、le1=NULL;DWORDdwThreadID1;HMODULEhModule=:GetModuleHandle(NULL);if(hModule!=NULL)/初始化MFC并在失败时显示错误if(!AfxWinInit(hModule,NULL,:GetCommandLine(),0)/TODO:更改错误代码以符合您的需要_tprintf(_T(错误:MFC初始化失败n);nRetCode=1;else/TODO:在此处为应用程序的行为编写代码。else/TODO:更改错误代码以符合您的需要_tprintf(_T(错误: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.);运行结果如图所示。E!cppOS-TESTADebugXOS-TEST.eateHello,ThisisaThread.完成以下设计题目

5、:向线程对应的函数传递参数,如字符串“helloworld!”,在线程中显示。如何创建3个线程A,B,C,并建立先后序执行关系A-BC。实验内容2线程同步完成父线程和子线程的同步。父线程创建子线程后进入阻塞状态,子线程运行完毕后再唤醒。相关系统调用:等待对象WaitForSingleObject().WaitForMultipleObjects();信号量对象CreateSemaphore(),OpenSemaphore(),ReleaseSemaphore();HANDLEWINAPICreateSemaphore(_In_opt_LPSECURITY_ATTRIBUTESlpSemapho

6、reAttributes_In_LONGllnitialCount,_In_LONGlMaximumCount,_In_opt_LPCTSTRlpName);第一个参数:安全属性,如果为NULL则是默认安全属性第二个参数:信号量的初始值,要=0且=第三个参数第三个参数:信号量的最大值第四个参数:信号量的名称返回值:指向信号量的句柄,如果创建的信号量和已有的信号量重名,那么返回已经存在的信号量句柄参考代码:/OS-TEST.cpp:定义控制台应用程序的入口点。/#includestdafx.h#includeOS-TEST.h#ifdef_DEBUG#definenewDEBUG_NEW#end

7、if/唯一的应用程序对象CWinApptheApp;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);编译运行,结果如图所示。DAcppXOS-TESTXC-ebugXOS-TEST.exeSeinaphorecreatesuccess!fceinaphoreop

12、ensuccess!Threadcreatesuccess!inThread.aitforsingleobject.ERR-0SeinaphoreReleas已Success,rc-1dRss-0easeSemaphaxeerr-Q完成以下设计题目:用信号量控制实现3个线程的同步,线程A释放信号量后执行B,B释放信号量后执行C。四、实验结果实验内容11.向线程对应的函数传递参数,如字符串“helloworld!”,在线程中显示。结果:rt=:t.ijrnUTTr.T./66645.cpp:定!义。?控?制?台F应丨用血?程-序的I?.入?口2点1?。達/#includestdafx.h#inc

13、lude66645.h#ifdef_DEBUG#definenewDEBUG_NEW#endif/唯i?的1?应|用血?程-序对?象CWinApptheApp;usingnamespacestd;voidThreadName1();int_tmain(intargc,TCHAR*argv,TCHAR*envp)intnRetCode=0;staticHANDLEhHandle1=NULL;DWORDdwThreadID1;HMODULEhModule=:GetModuleHandle(NULL);if(hModule!=NULL)/初?始?化匚MFC并迸在s失“败厂1时二入显?示?错玄误if(

14、!AfxWinInit(hModule,NULL,:GetCommandLine(),0)/TODO:更-1改?错aa误、代a2码?以。?符0?合?您“的?需要。a_tprintf(_T(错a误:MFC初?始?化匚失“败ain);nRetCode=1;else/TODO:在2此a?处a|为&应丨用?程-序。的1?行D为a编AO写ia代a码?。達else/TODO:更1改?错aa误代a2码?以。?符。?合?您2的?需要a_tprintf(_T(错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.);如何创建3个线程A,B,C,并建立先后序执行关系A-B-CoJE:usersmzylidDCLimentevisualstudio2010Projects1475B9Debug1475B9.exemllo,Thisis

16、aThreadA.LTnisisaThreadB.TiibJsaThreadC./147589.cpp:定!义。?控?制?台F应丨用?程J序的I?入?口2点1?。達/#includestdafx.h#include147589.h#ifdef_DEBUG#definenewDEBUG_NEW#endif/唯i?的I?应|用血?程-序对?象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时二入显?示?错玄误if(!AfxWinInit(hModule,NULL,:GetCommandLine(),0)/TODO:更-1改?错aa误、代a2码?以。?符0?合?您“的?需要。a_tprintf(_T(错a误:MFC初?始?化匚失“败ain);nRetCode=1;else/TODO:在2此a?处a|为&应丨用?程-序。的1?行D为a编AO写ia代a码?。達else/TODO:更1改?错aa误代a2码?以。?符。?合?您2的?需要a_tprintf(_T(错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);实验内容22.用信号量控制实现3个线程的同步,线程A释放信号量后执行B,B释放信号量后执行C。BlE:u&ers.mzyIidocumentsvisuaIstudio2010Projects1234569Debg1234569.exesuccess!ISemaphorecreatesuccess!SemaphoreopenThreadcreatesuccess!的口评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:定!义。?控?制?台-j应丨用?程-序-的I?入?口2点I?oie/#includestdafx.h#include1234569.h#ifdef_DEBUG#definenewDEBUG_NEW#endif/唯i?的1?应|用血?程-序对?象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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论