临界区和事件

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秒,而不是无限,它的单位是毫秒。

转载于:https://www.cnblogs.com/sjxbg/p/5767971.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值