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;
    }
  • 相关阅读:
    linux 命令——19 find (转)
    linux 命令——18 locate (转)
    linux 命令——17 whereis(转)
    linux 命令——16 which(转)
    linux 命令——15 tail (转)
    linux 命令——14 head (转)
    Java for LeetCode 038 Count and Say
    Java for LeetCode 037 Sudoku Solver
    Java for LeetCode 036 Valid Sudoku
    Java for LeetCode 035 Search Insert Position
  • 原文地址:https://www.cnblogs.com/tinaluo/p/7686816.html
Copyright © 2011-2022 走看看