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


    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:

     
     
     
  • 相关阅读:
    从零开始学架构(一):架构师成长路径(转)
    从零开始学架构:开篇-文章大纲(转)
    JAVA通信系列二:mina入门总结(转)
    JAVA通信系列三:Netty入门总结(转)
    JAVA通信系列一:Java Socket技术总结(转)
    大型网站架构系列:消息队列(二)(转)
    大型网站架构系列:分布式消息队列(一)(转)
    大型网站架构系列:缓存在分布式系统中的应用(三)(转)
    大型网站架构系列:缓存在分布式系统中的应用(二)(转)
    大型网站架构系列:负载均衡详解(3)(转)
  • 原文地址:https://www.cnblogs.com/lihaozy/p/2620167.html
Copyright © 2020-2023  润新知