华北电力大学
实 验 报 告
| |
实验名称 验证性试验、设计性试验
课程名称 Windows| |
体系及编程
专业班级: 计科0803 学生姓名:董世令 学 号:0302 成 绩:
指导教师:王新颖 实验日期:进程管理实验
一、实验目的
理解Windows编程环境下的进程管理机制,能创建一个完成特定功能的进程,并能对进程进行信息的获取、终止和保护。
二、实验要求
1. 编写一段程序,能够完成创建进程的功能,要求启动windows记事本程序(),
同时打开一个文本文件,路径为:c:\\system\\ 。并打印出新建进程ID。
2. 获取当前系统进程信息,打印输出进程名称和ID号。 3. 终止新创建的进程并获取退出代码。 三、实验原理
(1)进程的创建
进程的创建通过CreateProcess()函数来实现,CreateProcess()通过创建一个新的进程及在其地址空间内运行的主线程来启动并运行一个新的程序。具体地,在执行CreateProcess()函数时,首先由操作系统负责创建一个进程内核对象,初始化计数为1,并立即为新进程创建一块虚拟地址空间。随后将可执行文件或其他任何必要的动态链接库文件的代码和数据装载到该地址空间中。在创建主线程时,也是首先由系统负责创建一个线程内核对象,并初始化为1。最后启动主线程并执行进程的入口函数WinMain(),完成对进程和执行线程的创建。
CreateProcess()函数的原型声明如下: BOOL CreateProcess(
LPCTSTR lpApplicationName, ET环境,msdn帮助文档。 五、实验正文 #include \ #include <> #include <>
#include <>
开始 应用程序 ③ ④ 消息队列事件1 事件2 事件3 …... 事件n 操作系统 消息处理 ① ② 输入输出设备 结束 事件驱动编程模型 hPrevInstance [in] Handle to the previous instance of the application. This parameter is always NULL. If you need to detect whether another instance already exists, create a uniquely named mutex using the CreateMutex function. CreateMutex will succeed even if the mutex already exists, but the function will return ERROR_ALREADY_EXISTS. This indicates that another instance of your application exists, because it created the mutex first. lpCmdLine [in] Pointer to a null-terminated string specifying the command line for the application, excluding the program name. To retrieve the entire command line, use the GetCommandLine function. nCmdShow [in] Specifies how the window is to be shown. This parameter can be one of the following values. SW_HIDE Hides the window and activates another window. 返回值说明:
If the function succeeds, terminating when it receives a WM_QUIT message, it should return the exit value contained in that message's wParam parameter. If the function terminates before entering the message loop, it should return zero.
winmain中主要完成两项最基本的工作:创建一个主窗口、完成消息循环。在创建主窗口的过程中指定了消息相应函数的地址。所以我们还需要编写一个消息相应函数。
创建一个完整的窗口需要经过下面四个操作步骤: ? 设计一个窗口类; ? 注册窗口类; ? 创建窗口;
? 显示及更新窗口;
消息相应函数: 举例:汽车厂家生产汽车好比应用程序创建窗口,用户使用汽车好比操作系统管理窗口,某种汽车在销售前就指定好了修理站(类似回调函数),当用户的汽车出现故障后(类似窗口收到消息),汽车用户(类似操作系统)自己直接找到修理站去修理,不用厂家(类似应用程序)亲自将车送到修理站去修理,但修理站还得由厂家事先建造好。
消息相应函数原形说明如下:
LRESULT CALLBACK WinSunProc(
HWND hwnd, ET环境,msdn帮助文档。 五、 实验正文 #include <> #include \
ET
环境,msdn帮助文档。
五、 实验正文
#include<> #include<>
#include
UINT WINAPI Philo(PVOID pvParam) { int n = atoi((char *) pvParam); if(n%2==1) {
for(int i=0;i<5;i++) { ::WaitForSingleObject(g_chops[n-1],INFINITE); ::WaitForSingleObject(g_chops[n],INFINITE); cout< int main(int argc, char* argv[]) { for(int i=0;i<5;i++) { g_chops[i]=::CreateEvent(NULL,FALSE,TRUE,NULL); } HANDLE hThread[5]; hThread[0]=(HANDLE)_beginthreadex(NULL,0,Philo,\ Sleep(10); hThread[1]=(HANDLE)_beginthreadex(NULL,0,Philo,\ Sleep(10); hThread[2]=(HANDLE)_beginthreadex(NULL,0,Philo,\ Sleep(10);