图解C++多线程问题介绍

开发 后端
在C++多线程的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类和基类向子类的强制类型转换。

下面着重介绍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++语言的种种高安全性
责任编辑:chenqingxiang 来源: 计世网
相关推荐

2021-03-05 07:38:52

C++线程编程开发技术

2012-05-18 10:36:20

CC++编程

2020-12-28 08:03:26

多线程进程浏览器

2010-02-05 15:30:54

C++多线程测试

2010-02-04 10:19:39

C++多线程

2021-02-25 15:58:46

C++线程编程开发技术

2024-06-24 08:10:00

C++互斥锁

2024-11-05 16:29:57

2023-12-14 15:05:08

volatile代码C++

2010-01-19 18:51:17

C++类

2024-06-24 12:57:09

多线程C++编程语言

2010-01-13 10:37:55

C++开发

2009-09-01 17:15:42

C#多线程应用

2010-01-11 15:21:18

C++语言

2024-02-02 18:29:54

C++线程编程

2015-03-24 13:46:29

C++多线程计数器特性实现

2011-06-14 15:25:28

C++多线程

2010-01-15 15:52:18

CC++

2011-07-22 14:55:20

多线程

2010-01-15 10:41:06

CC++
点赞
收藏

51CTO技术栈公众号