
//本文描述的事件,是线程语境的事件(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;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)