图解C 多线程问题介绍
创始人
2024-06-21 04:30:30
0

下面着重介绍C++多线程,C++多线程为了同步完成了多项任务,而且很大程度的提高了资源使用效率,用较简单的话语解释C++多线程问题,它就是在同一时间内完成多项任务。

重要区段(TCriticalSection)和事件(TEvent)得到了应用。生产者通过TEvent类的对象Begin Consume来通知消费者开始消费,而消费者通过TEent类的对象Begin Produce通知生产者开始生产。程序中共有两个生产者,一个消费者。在两个生产者之间,通过TCriticalSection类的对象同步。其运行界面如图1所示。

 程序运行效果

主要源程序如下所示:生产者线程:

  1. Void __fast call TProducerThread:: Execute ()  
  2. {  
  3.  //---- Place thread code here ----  
  4.  Int i = 0;  
  5.  Int j;  
  6.  while(i<100) //每个生产者线程生产100个商品  
  7.  {  
  8.   Sleep(1000);//延迟,为清楚得显示执行效果  
  9.   if(Form1->buffer_size > 0)//缓冲池不空,通知消费者消费  
  10.   {  
  11.    Form1->Begin Consumer->Set Event ();  
  12.  }  
  13.  Form1->Produce Guard->Acquire ();  
  14.  i++;  
  15.  StrResult = IntToStr (i);  
  16.  J = Form1->buffer_size;  
  17.  Form1->Product [j] = i;  
  18.  Form1->buffer_size++;  
  19.  Synchronize(Show Result);//刷新界面,显示最新生产-消费状况  
  20.  Form1->Begin Consumer->Set Event();//通知消费者消费  
  21.  if(Form1->buffer_size == 5)//缓冲池满,挂起生产者线程,直到通知再生产  
  22.  {  
  23.   Form1->Begin Produce->Wait For (INFINITE);  
  24.  }  
  25.  Sleep (1000);  
  26.  Form1->Produce Guard->Release ();  
  27. }  
  28. While (Form1->buffer_size > 0)  
  29. {  
  30.  Form1->Begin Consumer->Set Event ();  
  31. }  

消费者线程:

  1. Void __fast call TConsumerThread::Execute()  
  2. {  
  3.  //---- Place thread code here ----  
  4.  Int j;  
  5.  For (int i = 0;i < 200;i++)  
  6.  {  
  7.   Sleep(100); //延迟,为清楚得显示执行效果  
  8.   Form1->Begin Consumer->Wait For(INFINITE);//挂起消费者线程,直到通知再消费  
  9.   J = Form1->buffer_size - 1;  
  10.   StrResult = IntToStr (Form1->Product [j]);  
  11.   Form1->buffer_size--;  
  12.   Synchronize(Show Result); //刷新界面,显示最新生产-消费状况  
  13.   if(Form1->buffer_size == 4)//缓冲池不再full,唤醒由于缓冲池full而挂起的生产者线程  
  14.   {  
  15.    Form1->Begin Produce->Set Event ();  
  16.   }  
  17.   Sleep (100);  
  18.  }  

本文讨论了C++多线程编程及其可行性,说明了在Windows环境下进行C++多线程编程的意义,并重点讨论了C++Builder平台下如何开发多线程应用程序这一问题,通过实现"生产者-消费者问题"这一著名的进程同步问题,比较清晰地反映了在Windows环境下进行多线程编程技术及其实现的作用和效果。

【编辑推荐】

  1. 如何正确编写C++项目开发编写项目计划书
  2. 对C++库函数进行学习探索总结笔记
  3. 深度演示C++语言的种种高安全性
  4. 详细介绍如何准确无误的编写C++语言
  5. 深度演示C++语言的种种高安全性

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...