windows进程管理实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验报告课程名称:操作系统实验项目:windows进程管理姓名:专业:计算机科学与技术班级:学号:计算机科学与技术学院计算机系2019年4月23日成绩:哈尔滨理工大学计算机科学与技术学院计算机系实验报告实验项目名称:windows进程管理一、实验目的1.学习windows系统提供的线程创建、线程撤销、线程同步等系统调用;2.利用C++实现线程创建、线程撤销、线程同步程序;3.完成思考、设计与练习。二、实验用设备仪器及材料1.Windows7或10,VS2010及以上版本。三、实验内容1线程创建与撤销写一个windows控制台程序(需要MFC),创建子线程,显示Hello,ThisisaThread.然后撤销该线程。相关系统调用:线程创建:CreateThread()线程撤销: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;staticHANDLEhHandle1=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;}hHandle1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID)NULL,0,&dwThreadID1);Sleep(5000);哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告CloseHandle(hHandle1);ExitThread(0);//getchar();returnnRetCode;}voidThreadName1(){printf(Hello,ThisisaThread.);}运行结果如图所示。完成以下设计题目:1.向线程对应的函数传递参数,如字符串“helloworld!”,在线程中显示。2.如何创建3个线程A,B,C,并建立先后序执行关系A→B→C。实验内容2线程同步完成父线程和子线程的同步。父线程创建子线程后进入阻塞状态,子线程运行完毕后再唤醒。相关系统调用:等待对象WaitForSingleObject(),WaitForMultipleObjects();信号量对象CreateSemaphore(),OpenSemaphore(),ReleaseSemaphore();HANDLEWINAPICreateSemaphore(_In_opt_LPSECURITY_ATTRIBUTESlpSemaphoreAttributes_In_LONGlInitialCount,_In_LONGlMaximumCount,_In_opt_LPCTSTRlpName);第一个参数:安全属性,如果为NULL则是默认安全属性第二个参数:信号量的初始值,要=0且=第三个参数第三个参数:信号量的最大值第四个参数:信号量的名称哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告返回值:指向信号量的句柄,如果创建的信号量和已有的信号量重名,那么返回已经存在的信号量句柄参考代码://OS-TEST.cpp:定义控制台应用程序的入口点。//#includestdafx.h#includeOS-TEST.h#ifdef_DEBUG#definenewDEBUG_NEW#endif//唯一的应用程序对象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=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);elseprintf(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=GetLastError();printf(WaitforsingleobjectERR=%d\n,err);if(dRes==WAIT_TIMEOUT)printf(TIMEOUTOFdRes=%d\n,dRes);elseif(dRes=WAIT_OBJECT_0)printf(WAIT_OBJECTdRes=%d\n,dRes);elseif(dRes==WAIT_ABANDONED)printf(WAIT_ABANDONEDdRes=%d\n,dRes);elseprintf(dRes=%d\n,dRes);CloseHandle(h1);CloseHandle(hHandle1);ExitThread(0);returnnRetCode;}voidfunc(){BOOLrc;DWORDerr;printf(NowinThread.\n);rc=ReleaseSemaphore(hHandle1,1,NULL);err=GetLastError();printf(ReleaseSemaphoreerr=%d\n,err);if(rc==0)printf(SemaphoreReleaseFail.\n);elseprintf(SemaphoreReleaseSuccess.rc=%d\n,rc);}哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告编译运行,结果如图所示。完成以下设计题目:3.用信号量控制实现3个线程的同步,线程A释放信号量后执行B,B释放信号量后执行C。四、实验结果实验内容11.向线程对应的函数传递参数,如字符串“helloworld!”,在线程中显示。结果:哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告//66645.cpp:定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê//#includestdafx.h#include66645.h#ifdef_DEBUG#definenewDEBUG_NEW#endif//唯¡§一°?的Ì?应®|用®?程¨¬序¨°对?象¨®CWinApptheApp;usingnamespacestd;voidThreadName1();int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;staticHANDLEhHandle1=NULL;DWORDdwThreadID1;HMODULEhModule=::GetModuleHandle(NULL);if(hModule!=NULL){//初?始º?化¡¥MFC并¡é在¨²失º¡ì败㨹时º¡À显?示º?错䨪误¨®if(!AfxWinInit(hModule,NULL,::GetCommandLine(),0)){//TODO:更¨¹改?错䨪误¨®代䨲码?以°?符¤?合?您¨²的Ì?需¨¨要°a_tprintf(_T(错䨪误¨®:MFC初?始º?化¡¥失º¡ì败㨹\n));nRetCode=1;}else{//TODO:在¨²此ä?处ä|为a应®|用®?程¨¬序¨°的Ì?行D为a编À¨¤写¡ä代䨲码?。¡ê}}else{//TODO:更¨¹改?错䨪误¨®代䨲码?以°?符¤?合?您¨²的Ì?需¨¨要°a_tprintf(_T(错䨪误¨®:GetModuleHandle失º¡ì败㨹\n));nRetCode=1;}hHandle1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告(LPTHREAD_START_ROUTINE)ThreadName1,(LPVOID)NULL,0,&dwThreadID1);Sleep(5000);CloseHandle(hHandle1);ExitThread(0);//getchar();returnnRetCode;}voidThreadName1(){printf(Hello,World.);}2.如何创建3个线程A,B,C,并建立先后序执行关系A→B→C。//147589.cpp:定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê//哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告#includestdafx.h#include147589.h#ifdef_DEBUG#definenewDEBUG_NEW#endif//唯¡§一°?的Ì?应®|用®?程¨¬序¨°对?象¨®CWinApptheApp;usingnamespacestd;voidThreadName1();voidThreadName2();voidThreadName3();staticHANDLEh1;staticHANDLEh2;staticHANDLEh3;staticHANDLEhHandle1=NULL;staticHANDLEhHandle2=NULL;staticHANDLEhHandle3=NULL;int_tmain(intargc,TCHAR*argv[

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功