zoukankan      html  css  js  c++  java
  • 事件,线程同步

    内核对象都有一个计数器,Create和Open都加一,Close都减一,直到0内核对象才会销毁。

    1、事件对象的创建

    HANDLE CreateEvent(
    LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性 NULL时为系统默认
    BOOL bManualReset, // TRUE 通过调用ResetEvent将事件对象标记为未通知
    BOOL bInitialState, // TRUE 已通知状态 FALSE未通知状态
    LPCTSTR lpName // 对象名称 以NULL结尾的字符串
    );

    OpenEvent(EVENT_ALL_ACCESS, FALSE, "XYZ");
    2、事件对象的控制

    BOOL SetEvent(HANDLE hEvent); //将对象设置为已通知

    3、关闭时间对象句柄
    //关闭句柄
    CloseHandle(HANDLE);

    CreateEvent第二个参数位true的话,就意味着当第一个线程waitfor到的话,事件为已通知状态,且事件状态不改变。fasle的话,只要waitfor到的话事件状态从已通知变为未通知。

    线程同步程序。

    #include<windows.h>
    HANDLE h1;
    HANDLE h2;
    int x = 0;
    
    DWORD WINAPI ThreadCustomer(LPVOID lpParameter)
    {
        for(int i = 0; i < 10; i++)
        {
            WaitForSingleObject(h2, INFINITE);
            x = 0;
            DWORD id = GetCurrentThreadId();
            printf("%d------>%d
    ", id, x);
            SetEvent(h1);
        }
        return 0;
    }
    
    DWORD WINAPI ThreadProduct(LPVOID lpParameter)
    {
        for(int i = 0; i < 10; i++)
        {
            WaitForSingleObject(h1, INFINITE);
            x = 1;
            DWORD id = GetCurrentThreadId();
            printf("%d------>%d
    ", id, x);
            SetEvent(h2);
        }
        return 0;
    }
    
    int main(int argc, char* argv[])
    {
        HANDLE hThread[2];
    
        h1 = CreateEvent(NULL, FALSE, TRUE, NULL);
        h2 = CreateEvent(NULL, FALSE, FALSE, NULL);
    
        hThread[0] = ::CreateThread(NULL, 0, ThreadCustomer, NULL, 0, NULL);
        hThread[1] = ::CreateThread(NULL, 0, ThreadProduct, NULL, 0, NULL);
    
        WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
        CloseHandle(h1);
        CloseHandle(h2);
    
        CloseHandle(hThread[0]);
        CloseHandle(hThread[1]);
        return 0;
    
    }
  • 相关阅读:
    weblogic无需用户名密码启动Server
    中文和unicode互转
    spring集成activeMQ
    jvm分析(MD语法)
    解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
    httpclient 支持代理和http & https
    容器配置jndi Tomcat为例
    java https tomcat 单双认证(含证书生成和代码实现) 原创转载请备注,谢谢O(∩_∩)O
    java Http原生 Get 和Post 支持代理认证
    解决客户端访问https报错
  • 原文地址:https://www.cnblogs.com/Lu3ky-Athena/p/13726471.html
Copyright © 2011-2022 走看看