来源:zironf链接: Sleep(0);//延迟,为清楚得显示执行效果 if(Form1-buffer_size0)//缓冲池不空,通知消费者消费 { Form1-BeginConsumer-SetEvent(); } Form1-ProduceGuard-Acquire(); i++; StrResult=IntToStr(i); J=Form1-buffer_size; Form1-Product[j]=i; Form1-buffer_size++; Synchronize(ShowResult);//刷新界面,显示最新生产-消费状况 Form1-BeginConsumer-SetEvent();//通知消费者消费 if(Form1-buffer_size==5)//缓冲池满,挂起生产者线程,直到通知再生产 { Form1-BeginProduce-WaitFor(INFINITE); } Sleep(0); Form1-ProduceGuard-Release();}While(Form1-buffer_size0){ Form1-BeginConsumer-SetEvent();}}
消费者线程:
Void__fastcallTConsumerThread::Execute(){ //----Placethreadcodehere---- Intj; For(inti=0;i;i++) { Sleep();//延迟,为清楚得显示执行效果 Form1-BeginConsumer-WaitFor(INFINITE);//挂起消费者线程,直到通知再消费 J=Form1-buffer_size-1; StrResult=IntToStr(Form1-Product[j]); Form1-buffer_size--; Synchronize(ShowResult);//刷新界面,显示最新生产-消费状况 if(Form1-buffer_size==4)//缓冲池不再full,唤醒由于缓冲池full而挂起的生产者线程 { Form1-BeginProduce-SetEvent(); } Sleep(); }}
结论本文讨论了多线程编程及其可行性,说明了在Windows环境下进行多线程编程的意义,并重点讨论了C++Builder平台下如何开发多线程应用程序这一问题,通过实现”生产者-消费者问题”这一著名的进程同步问题,比较清晰地反映了在Windows环境下进行多线程编程技术及其实现的作用和效果。
预览时标签不可点收录于话题#个上一篇下一篇