Windows Event 的各个相关函数解释 及 简单例子一个

来源:互联网 发布:哪有好的java培训 编辑:程序博客网 时间:2024/06/05 17:12

 

SetEvent 是设置信号为 有信号状态
ReSetEvent 是设置信号为 无信号状态
CreateEvent的第二个参数如果是TRUE,意思是你必须用SetEvent和ResetEvent来设置信号,如果为FALSE,则用WaitForSingleObject自动进入无信号状态。结束后用SetEvent重置为信号状态。

OpenEvent可以打开一个先前已经创建好的Event,只要名字对,就可以打开该event。

Event事件分 人工事件和自动事件。
当使用人工事件方式时,需要手动设置ResetEvent 为无信号状态,及表示资源被占用中。当释放资源时,用SetEvent 设置为有信号状态。
当使用自动事件方式时,系统默认将ResetEvent 设置为无信号状态,最后释放资源时用SetEvent设置为有信号状态。
 
 
 
 
以下有2个进程,A和B,其中A可以决定一个event的状态(要么set,要么reset),而B中有一个循环不停去读该event(waitforsingleobject()函数),并给出输出提示当前event的状态是什么。
复制代码
//a.cpp#include <iostream>#include <Windows.h>using namespace std;int main(){    int i = 0;    CHAR a[20] = "RIX";                                    //event name    LPCSTR str = a;                                        //event name    HANDLE handle = CreateEvent(NULL, TRUE, TRUE, str);    //create a event    while(1)    {        cout<<"Press 1 to set event,";        cout<<" 2 to reset event,";        cout<<" 5 to shut down..."<<endl;        cin>>i;                                            //read command is a while(1) looop        if (i == 1)                                        //to set event        {            if (SetEvent(handle))                cout<<"SetEvent() completed!"<<endl;            else                cout<<"SetEvent() err!!"<<endl;        }        else if (i == 2)                                //to reset event        {            if (ResetEvent(handle))                cout<<"ResetEvent() completed!"<<endl;            else                cout<<"ResetEvent() err!!"<<endl;        }        else if (i==0)                                    //break        {            cout<<"going to shut down..."<<endl;            break;        }    }    return 1;}
复制代码

 

复制代码
//b.cpp#include <iostream>#include <Windows.h>using namespace std;int main(){    LPCSTR a = "RIX";    HANDLE handle = OpenEvent(EVENT_ALL_ACCESS, FALSE, a);    DWORD b = 22;    while(1)    {        Sleep(1000);        b = WaitForSingleObject(handle, 1);                    //check event value        if (b == 0)                                            //if event is set!! b can do something        {            cout<<"Got event!!!!!!!!! We can do something!"<<endl<<endl;        }        else                                                //if event is not set, waitforsingleobject is timeout...         {            cout<<"Timeout........... b = "<<b<<endl<<endl;        }    }    }
复制代码

 

 我们运行一下,

首先创建一个set的event,然后点2改为reset,然后再点1改为set,看process A 和 process B的结果:

A process:

 

B process:

 
原创粉丝点击