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;
    
    }
  • 相关阅读:
    Java中Filter、Servlet、Listener的学习 (转)
    Servlet 获取商品信息作业
    Servlet 注册与提交作业
    jsp servlet的区别和联系(转)
    用户注册验证留言程序
    作业1
    简单新闻发布系统
    webform 增速删改查 方法
    存取数据库图片
    打印 保存
  • 原文地址:https://www.cnblogs.com/Lu3ky-Athena/p/13726471.html
Copyright © 2011-2022 走看看