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;
    }
    让数据变得更安全!
  • 相关阅读:
    zabbix-agent报错记录
    远程执行命令恢复
    触发器例子
    自定义监控项
    监控项更新间隔
    python paramiko登陆设备
    python爬取某站磁力链
    python网络编程
    并发爬取网站图片
    Pandas Series和DataFrame的基本概念
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5317038.html
Copyright © 2011-2022 走看看