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

    // wondows原理day002.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include<windows.h>
    
    
    //3个全局事件对象句柄
    HANDLE hEventA, hEventB, hEventC;
    
    
    //线程A
    DWORD WINAPI ThreadProc1(_In_ LPVOID lpParameter)
    {
        for (int i = 0; i < 10; i++)
        {
            WaitForSingleObject(hEventA, -1);
            printf("A
    ");
            //关闭自己,打开下一个要打印的事件对象
            ResetEvent(hEventA);
            SetEvent(hEventB);
        }
        return 0;
    }
    
    
    
    //线程B
    DWORD WINAPI ThreadProc2(_In_ LPVOID lpParameter)
    {
        for (int i = 0; i < 10; i++)
        {
            WaitForSingleObject(hEventB, -1);
            printf("B
    ");
            //关闭自己,打开下一个要打印的事件对象
            ResetEvent(hEventB);
            SetEvent(hEventC);
        }
        return 0;
    }
    
    
    
    //线程C
    DWORD WINAPI ThreadProc3(_In_ LPVOID lpParameter)
    {
        for (int i = 0; i < 10; i++)
        {
            WaitForSingleObject(hEventC, -1);
            printf("C
    ");
            //关闭自己,打开下一个要打印的事件对象
            ResetEvent(hEventC);
            SetEvent(hEventA);
        }
        return 0;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    
    
        //创建3个事件对象
        hEventA = CreateEvent(NULL, TRUE, TRUE, L"A");
        hEventB = CreateEvent(NULL, TRUE, FALSE, L"B");
        hEventC = CreateEvent(NULL, TRUE, FALSE, L"C");
    
    
    
        //创建3个线程,分别实现打印A,B,C
        HANDLE hThread1 = CreateThread(NULL, NULL, ThreadProc1, NULL, NULL,NULL);
        HANDLE hThread2 = CreateThread(NULL, NULL, ThreadProc2, NULL, NULL, NULL);
        HANDLE hThread3 = CreateThread(NULL, NULL, ThreadProc3, NULL, NULL, NULL);
    
    
    
        //等待线程返回
        WaitForSingleObject(hThread1, -1);
        WaitForSingleObject(hThread2, -1);
        WaitForSingleObject(hThread3, -1);
        HANDLE arrHandle[] = { hThread1, hThread2, hThread3 };
    
    
    
    
        //也可以用下面的多对象等待
        //WaitForMultipleObjects(3,arrHandle,TRUE,INFINITE)
    
        system("pause");
        return 0;
    }
    让数据变得更安全!
  • 相关阅读:
    [转]scrapy中的request.meta
    Item Pipeline
    scrapy spider官方文档
    scrapy选择器主要用法
    scrapy 选择器官方文档
    【bzoj3514】Codechef MARCH14 GERALD07加强版 LCT+可持久化线段树
    【bzoj3813】奇数国 线段树
    【loj6177】「美团 CodeM 初赛 Round B」送外卖2 Floyd+状压dp
    【bzoj4499】线性函数 线段树
    【bzoj1018】[SHOI2008]堵塞的交通traffic 线段树区间合并+STL-set
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5317038.html
Copyright © 2011-2022 走看看