您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > windows进程管理
实验报告课程名称:操作系统windows进程管理实验项目:windows进程管理姓名:刘文远专业:计算机科学与技术班级:计17-10班学号:1704011011计算机科学与技术学院计算机系2019年5月13日成绩:哈尔滨理工大学计算机科学与技术学院计算机系实验报告实验项目名称:windows进程管理一、实验目的1.学习windows系统提供的线程创建、线程撤销、线程同步等系统调用;2.利用C++实现线程创建、线程撤销、线程同步程序;3.完成思考、设计与练习。二、实验环境Windows7或10,VS2010及以上版本。三、实验内容1线程创建与撤销(1).向线程对应的函数传递参数,如字符串“helloworld!”,在线程中显示。//OSTEST.cpp:Definestheentrypointfortheconsoleapplication.//#includestdafx.h#includeOSTEST.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(helloworld!);}运行结果如图所示。(2).如何创建3个线程A,B,C,并建立先后序执行关系A→B→C。//OSTEST.cpp:Definestheentrypointfortheconsoleapplication.//#includestdafx.h#includeOSTEST.h哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告#ifdef_DEBUG#definenewDEBUG_NEW#endif//唯一的应用程序对象CWinApptheApp;usingnamespacestd;voidThreadName1();voidThreadName2();voidThreadName3();int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;staticHANDLEhHandle1=NULL,hHandle2=NULL,hHandle3=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(3000);CloseHandle(hHandle1);hHandle2=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName2,(LPVOID)NULL,0,&dwThreadID1);Sleep(3000);CloseHandle(hHandle2);hHandle3=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)ThreadName3,(LPVOID)NULL,0,&dwThreadID1);Sleep(3000);CloseHandle(hHandle3);ExitThread(0);//getchar();returnnRetCode;}voidThreadName1(){printf(Hello,ThisisaThread_A.\n);}voidThreadName2(){printf(Hello,ThisisaThread_B.\n);}voidThreadName3(){printf(Hello,ThisisaThread_C.\n);}运行结果如图所示。哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告2线程同步(3).用信号量控制实现3个线程的同步,线程A释放信号量后执行B,B释放信号量后执行C。//OS-TEST.cpp:定义控制台应用程序的入口点。//#includestdafx.h#includeOS-TEST.h#ifdef_DEBUG#definenewDEBUG_NEW#endif//唯一的应用程序对象CWinApptheApp;usingnamespacestd;//voidThreadName1();staticHANDLEh1,h2,h3;staticHANDLEhHandle1=NULL;voidfunc1();voidfunc2();voidfunc3();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)func1,(LPVOID)NULL,0,&dwThreadID1);//CREATECHILDTHREADif(h1==NULL)printf(ThreadcreateERR!\n);elseprintf(Thread_Acreatesuccess!\n);Sleep(1000);h2=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func2,(LPVOID)NULL,0,&dwThreadID1);//CREATECHILDTHREADif(h2==NULL)printf(ThreadcreateERR!\n);elseprintf(Thread_Bcreatesuccess!\n);Sleep(1000);h3=CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func3,(LPVOID)NULL,0,&dwThreadID1);//CREATECHILDTHREADif(h3==NULL)printf(ThreadcreateERR!\n);elseprintf(Thread_Ccreatesuccess!\n);Sleep(1000);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);Sleep(10000);CloseHandle(h1);CloseHandle(hHandle1);ExitThread(0);哈尔滨理工大学计算机科学与技术学院实验教学中心实验报告returnnRetCode;}voidfunc1(){BOOLrc;DWORDerr;printf(NowinThread_A.\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);}voidfunc2(){BOOLrc;DWORDerr;WaitForSingleObject(hHandle1,INFINITE);printf(NowinThread_B.\n);rc=ReleaseSemaphore(hHandle1,1,NULL);err=GetLastError();printf(ReleaseSemaphoreerr=%d\n,err);if(rc==0)printf(SemaphoreReleaseFail.\n);elseprintf(SemaphoreReleaseSuccess.rc=%d\
本文标题:windows进程管理
链接地址:https://www.777doc.com/doc-5215126 .html