zoukankan      html  css  js  c++  java
  • 临界区和事件

    1.使用事件去控制线程1和线程2

    #include <Windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    HANDLE event[3] = { 0 };    //代表事件
    HANDLE hthread[3] = { 0 };    //代表线程
    
    DWORD WINAPI firstthread(void *p)
    {
        MessageBoxA(0, "1", "1", 0);
        printf("第一个线程执行完成");
        SetEvent(event[0]);
        return 0;
    }
    
    WORD WINAPI secondthread(void *p)
    {
        WaitForSingleObject(event[0], INFINITE);    //等待event信号出现
        MessageBoxA(0, "2", "2", 0);
        printf("第二个线程执行完成");
        return 0;
    }
    
    
    void main()
    {
        //event[0] = CreateEvent(NULL, TRUE, FALSE, NULL);                                                        
        //创建事件的四个属性:
        //SECURITY_ATTRIBUTES,指定一个结构,用于设置对象的安全特性。如变成ByVal As Long,并传递零值,则表明使用对象默认的安全设置
        //Long,如果为TRUE,表示创建一个人工重设事件;如果为FALSE,表示创建一个自动重设事件
        //Long,如事件应内部进入触发状态,则为TRUE
        //String,指定事件对象的名字。用vbNullString创建一个未命名事件对象。如已经存在拥有这个名字的一个事件,则现有的命名事件就会打开。这个名字可能不与一个现有互斥体、信号机、可等待计时器或文件映射的名字相符
        event[0] = CreateEvent(NULL, TRUE, FALSE, NULL);
        event[1] = CreateEvent(NULL, TRUE, FALSE, NULL);
    
        hthread[0]=CreateThread(NULL, 0, firstthread, NULL, 0, NULL);
        hthread[1]=CreateThread(NULL, 0, secondthread, NULL, 0, NULL);
        
        WaitForMultipleObjects(2, hthread, TRUE, INFINITE);
        printf("全部完成");
        system("pause");
    }

    Wait...中将INFINITE改成5000就表示等待5秒,而不是无限,它的单位是毫秒。

  • 相关阅读:
    JSP课程设计:宿舍管理系统(附源码)
    【博客模板页】从此不再为写博客头疼 (ノ ̄▽ ̄)~(ノ ̄▽ ̄)~(ノ ̄▽ ̄)~
    个人自定义的快捷键
    碎知识点收藏栏 [逆序时间排版]
    JavaSE (46)
    《Java8实战》05
    Python04
    【BUG11】
    三、如何科学地做到:算法竞赛从入门到放弃/算法竞赛从了解入坑到快速放弃指南?
    二、如何科学地在面试时踩雷?
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5767971.html
Copyright © 2011-2022 走看看