您的位置:首页 > 其它

使用全局CEvent在不同进程间通信

2013-03-22 14:55 148 查看
创建两个基于MFC的控制台应用程序;

假设一个exe叫【事件1】,另一个exe叫【事件2】;【事件1】中按空格键向【事件2】发消息,【事件2】响应并显示!

【事件1】关键程序:

//
// 创建一个共享的全局事件
//		第二个参数为设置信号后,自动复位为无信号
//		第三个参数为共享全局用的名字
//
CEvent *m_pEvt = new CEvent(FALSE, FALSE, "12345");
if (m_pEvt == NULL)
{
printf("创建事件失败\n");
return 0;
}

printf("按下空格键,向另一个创建exe发送事件通知\n");

//
// 按空格键向另一个进程发送事件
//
while(1)
{
if (kbhit())
{
char ch = getch();
if (ch == 'q')
break;

if (ch == ' ')
{
static int k = 0;
printf("发送事件: %d\n", k++);
m_pEvt->SetEvent();
}
}
Sleep(5);
}


【事件2】关键程序(启动和主循环中):

//
// 创建一个共享的全局事件
//		第二个参数为设置信号后,自动复位为无信号
//		第三个参数为共享全局用的名字
//
CEvent *m_pEvt = new CEvent(FALSE, FALSE, "12345");
if (m_pEvt == NULL)
{
printf("创建事件失败\n");
return 0;
}

//
// 创建线程等待接收
//
AfxBeginThread(MyControllingFunction, m_pEvt);

printf("等待另一个创建exe发送的事件通知\n");
//
// 主循环等待退出
//
while(1)
{
Sleep(5);
}


线程函数中:

UINT MyControllingFunction( LPVOID pParam )
{
CEvent *pEvt = (CEvent *)pParam;

while(1)
{
//使用 CSyncObject::operator HANDLE 转型
WaitForSingleObject((HANDLE)(*pEvt), INFINITE);

static int k = 0;
printf("收到事件: %d\n", k++);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐