zoukankan      html  css  js  c++  java
  • 事件同步(一)-——CreateEvent( )事件对象实现线程同步

    事件对象分为两类:人工重置事件对象和自动重置事件对象。
    对于人工重置事件对象,可以同时有多个线程等待到事件对象,成为可调度线程。

    对于自动重置事件对象,等待该事件对象的多个线程只能有一个线程成为可调度线程。此外,如果事件对象为自动重置事件对象,当某个线程等待到事件对象后,系统将自动将事件对象设置为未通知对象...

    #include "windows.h"
    #include <iostream>
    int number = 1;
    
    HANDLE hEvent;
    
    unsigned long _stdcall ThreadProc1(void *lpParameter) //线程1
    {
        while (number < 100)
        {
            WaitForSingleObject(hEvent, INFINITE);
            std::cout << "线程1当前计数:" <<number<<std::endl;
            number++;
            Sleep(100);
            SetEvent(hEvent);//设置事件为有信号状态;
        }
        return 0;
    }
    unsigned long _stdcall ThreadProc2(void *lpParameter) //线程2
    {
        while (number < 100)
        {
            WaitForSingleObject(hEvent, INFINITE);
            std::cout << "线程2当前计数:" << number << std::endl;
            number++;
            Sleep(1000);
            SetEvent(hEvent);
        }
        return 0;
    }
    int main(int argc, char *argv[])
    {
        HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL);
        HANDLE hThread2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL);
        hEvent = CreateEvent(NULL, FALSE, TRUE, "event");
        CloseHandle(hThread1);
        CloseHandle(hThread2);
        while (true)
        {
            ;
        }
        return 0;
    }
  • 相关阅读:
    MySQL修改root密码的多种方法
    AES和RSA算法的demo代码
    网卡
    Socket
    Opentracing 链路追踪
    TCP连接三次握手
    MongoDB 使用B树
    MySQL的DDL、DML、DCL
    MySQL 数据同步
    SSO(单点登录)与CAS
  • 原文地址:https://www.cnblogs.com/tinaluo/p/7686816.html
Copyright © 2011-2022 走看看