.

CBuilder多线程编程技术经

来源: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环境下进行多线程编程技术及其实现的作用和效果。

预览时标签不可点收录于话题#个上一篇下一篇

转载请注明:http://www.abachildren.com/jbzs/385.html