实验目的
利用信号通信机制在父子进程及兄弟进程间进行通信。
实验软硬件环境
VC++6.0 、Windows11、操作系统版本:22000.613
实验内容
父进程创建一个有名事件,由子进程发送事件信号,父进程获取事件信号后进行相应的处理。
实验程序及分析
子进程
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
HANDLE hEvent=OpenEvent(EVENT_ALL_ACCESS,TRUE,"parents");//打开命名事件
//OpenEvent是一个函数,可以用来执行返回事件对象的句柄
Sleep(1000);
printf("Signal the event to Parent?[Y\\N]:");
char ch;
scanf("%c", &ch);//接收字符
if(ch=='Y')
{
SetEvent(hEvent); //将事件置为有信号状态
}
else
{
return 0; //退出
}
Sleep(5000); //休眠一段时间
return 0;
}
father
#include <process.h>
#include <windows.h>
#include <iostream>
int main( )
{
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);
PROCESS_INFORMATION pi;
bool success = CreateProcess("子进程.exe", NULL, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
if(!success) /*创建子进程*/
{
printf("创建子进程失败!");
return 0;
}
printf("Wait for event.\n");
if(WAIT_FAILED == WaitForSingleObject(pi.hProcess, INFINITE))/*等待事件信号*/
{
printf("等待事件信号失败!");
return 0;
}
printf("Get the event.");
/*打印"Get the event"*/
return 0;
}
实验结果