c++ builder windows 线程之事件

c++ builder windows 线程之事件,第1张

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

//本文在c++ buider 10.3 调试通过。


#include
#include
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;
}


int main()

{    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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/564854.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-06
下一篇2022-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存