创建和销毁进程实验

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

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

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

资源描述

题目1:Windows进程的创建与销毁内容及要求:①掌握Windows进程的创建和销毁API的调用方法;编程代码,在程序中创建和销毁一个Word进程;②能够挂起和激活被创建进程的主线程;③通过Windows进程管理器查看系统进程列表的变化。实验指导:①创建进程的APIBOOLCreateProcess(LPCTSTRlpApplicationName,LPTSTRlpCommandLine,LPSECURITY_ATTRIBUTESlpProcessAttributes,LPSECURITY_ATTRIBUTESlpThreadAttributes,BOOLbInheritHandles,DWORDdwCreationFlags,LPVOIDlpEnvironment,LPCTSTRlpCurrentDirectory,LPSTARTUPINFOlpStartupInfo,LPPROCESS_INFORMATIONlpProcessInformation);例程:voidmain(VOID){STARTUPINFOsi;PROCESS_INFORMATIONpi;ZeroMemory(&si,sizeof(si));si.cb=sizeof(si);ZeroMemory(&pi,sizeof(pi));//Startthechildprocess.if(!CreateProcess(NULL,//Nomodulename(usecommandline)."MyChildProcess",//Commandline.NULL,//Processhandlenotinheritable.NULL,//Threadhandlenotinheritable.FALSE,//SethandleinheritancetoFALSE.0,//Nocreationflags.NULL,//Useparent'senvironmentblock.NULL,//Useparent'sstartingdirectory.&si,//PointertoSTARTUPINFOstructure.&pi)//PointertoPROCESS_INFORMATIONstructure.){ErrorExit("CreateProcessfailed.");}//Waituntilchildprocessexits.WaitForSingleObject(pi.hProcess,INFINITE);//Closeprocessandthreadhandles.CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}②销毁进程APIBOOLTerminateProcess(HANDLEhProcess,UINTuExitCode);③挂起进程的主线程APIDWORDSuspendThread(HANDLEhThread);④激活进程的主线程APIDWORDResumeThread(HANDLEhThread);⑤进程查看器题目2:Windows线程间的通信与互斥内容及要求:①理解Windows线程的管理方式,掌握线程创建和管理API的调用方法;②理解Windows的信号量机制,掌握信号量编程API的调用方法;③用Windows信号量机制,解决读者-写者问题。实验指导:MFC提供了一组同步和同步访问类来解决线程同步问题。其中,同步对象包括:CSyncObject、CSemaphore、CMutex,CCriticalSection和CEvent;同步访问对象包括:CMultiLock和CSingleLock。同步类用于访问资源时保证资源的整体性。其中CSyncObject是其他四个同步类的基类,不直接使用。信号同步类CSemaphore通常用于当一个应用程序中同时有多个线程访问一个资源的情况(例如,应用程序允许对同一个Document有多个View);事件同步类CEvent通常用于在应用程序访问资源之前应用程序必须等待的情况(比如,在数据写进一个文件之前数据必须从通信端口得到);互斥同步类CMutex和临界区同步类CCriticalSection都是用于保证一个资源一次只能有一个线程访问,二者的不同之处在于前者允许有多个应用程序使用该资源,例如,该资源在一个DLL当中,而后者则不允许对同一个资源的访问超出进程的范畴,而且使用临界区的方式效率比较高。同步访问类用于获得对这些控制资源的访问。CMultiLock和CSingleLock的区别仅在于是需要控制访问多个还是单个资源对象。信号量对象的构造函数:CSemaphore(LONGlInitialCount=1,LONGlMaxCount=1,实验代码#include<iostream>#include<stdlib.h>#include<windows.h>usingnamespacestd;intmain(){//一些必备参数设置STARTUPINFOsi;DWORDpid;memset(&si,0,sizeof(STARTUPINFO));//初始化si在内存块中的值.si.cb=sizeof(STARTUPINFO);si.dwFlags=STARTF_USESHOWWINDOW;si.wShowWindow=SW_SHOW;PROCESS_INFORMATIONpi;//必备参数设置结束//CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。if(!CreateProcess(TEXT("c:\\windows\\system32\\notepad.exe"),//指定可执行文件的文件名NULL,NULL,//默认进程安全性NULL,//默认进程安全性FALSE,//指定当前进程内句柄不可以被子进程继承0,//不为新进程创建新的控制台窗口NULL,//使用本进程的环境变量NULL,//使用本进程的驱动器和目录&si,&pi)){cout<<"CreateprocessFail!"<<endl;exit(1);}else{pid=pi.dwProcessId;cout<<"CreateprocessSuccess!"<<endl;}//句柄关掉CloseHandle(pi.hThread);CloseHandle(pi.hProcess);HANDLEhprocess=OpenProcess(PROCESS_TERMINATE,false,pid);//通过进程id获取进程句柄//SuspendThread函数挂起指定进程及其所有线程。if(!SuspendThread(hprocess)){cout<<"SuspendThreadFail!"<<endl;exit(1);}else{cout<<"SuspendThreadSuccess!"<<endl;}//ResumeThread函数激活指定进程及其所有线程。if(!ResumeThread(hprocess)){cout<<"ResumeThreadFail!"<<endl;exit(1);}else{cout<<"ResumeThreadSuccess!"<<endl;}//TerminateProcess函数终止指定进程及其所有线程。if(!TerminateProcess(hprocess,0)){cout<<"closeprocessFail!"<<endl;exit(1);}else{cout<<"closeprocessSuccess!"<<endl;}CloseHandle(hprocess);return0;}

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

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

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

×
保存成功