事件做为内核对象,即可用户线程间同步,又可用于进程同步,下面的测试代码用于进程间同步,不清楚的同学请留言。
A进程Demo:
#include "stdafx.h"
#include<windows.h>
#include <iostream>
using namespace std;
DWORD _stdcall ThreadFunc (_In_ LPVOID p)
{
int x=1;
HANDLE pEvent = *((HANDLE*)p);
while(1)
{
WaitForSingleObject(pEvent, INFINITE);
cout <<"我接收到了信号"<< x << endl;
x++;
}
}
int main()
{
//使用Global开头的名字 是为了保证名字是全局的,从而不论是内核还是应用层都可以使用
HANDLE hEvent = CreateEventA(NULL,false,false,"Global\\myEvent");
HANDLE hThread = CreateThread(NULL, 0, ThreadFunc, &hEvent, 0, NULL);
while(1);
return 0;
}
B进程Demo:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hEvent = OpenEventA(EVENT_ALL_ACCESS, false, "Global\\myEvent");
if (hEvent)
{
int x=1;
while(1)
{
SetEvent(hEvent);
cout << "信号激活第" << x << "次\n";
x++;
Sleep(2000);
}
}
return 0;
}
测试结果:
当B进程发送一次信号后,A进程会打印一次接收到信号。