c++ builder windows 线程之事件(event)

//本文描述的事件,是线程语境的事件(event)

//本文在c++ buider 10.3 64/32位,6.0都 调试通过

#include <vcl.h>

#include<windows.h>
#include<stdio.h>
int product_buffer = 3;
int product_num = 2;

//定义事件句柄,由于在多个线程中使用,需定义为全局变量
HANDLE hde_Producer,hde_Consumer;

DWORD WINAPI Producer(LPVOID lpParameter)
{   while(1)
    {   //等待生产者线程的事件信号
        WaitForSingleObject(hde_Producer,INFINITE);

        product_num++;
        printf("producer: produce 1, %d in buffer\n", product_num);

        Sleep(1000);

        //将消费者进程的事件置为Signaled
        SetEvent(hde_Consumer);
    }
    return 0;
}

DWORD WINAPI Consumer(LPVOID lpParameter)
{   while(1)
    {   //等待事件信号
        WaitForSingleObject(hde_Consumer,INFINITE);
        product_num--;
        if (product_num <= 1)

        {printf("consumer: consume 1, only %d left in buffer, alert!\n",product_num);
        }

       else

        { printf("consumer: consume 1, %d left in buffer\n",product_num);
        }
        Sleep(1000);
        //将生产者进程的事件置为Signaled
        SetEvent(hde_Producer);
    }

    return 0;
}

 #if(__BORLANDC__<=1380) // 低版本
  int main(int argc, char* argv[])
 #else  //高版本
  int _tmain(int argc, _TCHAR* argv[])
 #endif

{    HANDLE ThreadHandles[2];

    //创建两个事件,分别用于触发生产者进程和消费者进程。
    //生产者进程的事件的初始状态设置为有信号,消费者为无信号。两个事件都自动复位
    hde_Producer = CreateEvent(NULL,FALSE,TRUE,NULL);
    hde_Consumer = CreateEvent(NULL,FALSE,FALSE,NULL);

    ThreadHandles[0] = CreateThread(
        NULL,
        0,
        Producer,
        NULL,
        0,
        NULL
    );

    ThreadHandles[1] = CreateThread(
        NULL,
        0,
        Consumer,
        NULL,
        0,
        NULL
    );

    WaitForMultipleObjects(2,ThreadHandles,TRUE,INFINITE);
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值