您的位置:首页 > 其它

使用事件(Event)进行进程同步

2012-03-30 10:00 239 查看
  前一篇文章写了使用信号量进行进程同步,不过很显然,信号量更适合用于资源控制的场合,如果单纯为了进行同步控制,使用事件(Event)更加简洁和方便。

  事件的控制比信号量更为简单,没有最大资源计数和当前资源计数的属性,而只有是否触发这一属性,直接贴代码:

  控制进程:

  HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, "Robots_Sync_Signal");

  //......某些操作

  

  SetEvent(hEvent);

  

  同步进程:

  HANDLE hEvent = OpenEvent(SYNCHRONIZE, FALSE, "Robots_Sync_Signal");  

  if(hEvent != NULL)
  cout<<"Event Openned!"<<endl;
  else
  {
    cout<<"Error Openning Event"<<endl;
    cout<<"Last Error: "<<GetLastError()<<endl;
    cin>>ch;
    exit(0);
  }
  WaitForSingleObject(hEvent, INFINITE); //等待信号量触发

  cout<<"Got Event!"<<endl;

  //......同步以后的操作

  

  //Close Event Handle
  CloseHandle(hEvent);

  注意,这里打开事件内核对象的时候,权限只用了SYNCHRONIZE,这是因为同步进程只需要等待触发,而不需要释放资源,或者对事件做处理。当然,如果需要Set或Reset事件,也是可以的,只要增加EVENT_MODIFY_STATE权限即可。

  关于内核对象的访问权限,见MSDNhttp://msdn.microsoft.com/zh-cn/library/ms686670(v=vs.85).aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐