龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

漫谈C++ Builder多线程编程技术[组图]

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
摘 要:本文简单介绍了Windows环境下进行多线程编程的意义,重点讨论了C++Builder环境下开发多线程应用程序这一问题,并通过实现生产者-消费者问题,帮我们更好地理解同步概念及其

摘 要:本文简单介绍了Windows环境下进行多线程编程的意义,重点讨论了C++Builder环境下开发多线程应用程序这一问题,并通过实现生产者-消费者问题,帮我们更好地理解同步概念及其实现方法。

  

  要害词:多线程;同步;生产者-消费者;C++Builder

  

  图1 程序运行效果

  主要源程序如下所示:

  

  生产者线程:

  

  Void __fast call TProducerThread:: Execute ()

  {

    //---- Place thread code here ----

    Int i = 0;

    Int j;

    while(i<100) //每个生产者线程生产100个商品

    {

   Sleep(1000);//延迟,为清楚得显示执行效果

   if(Form1->buffer_size > 0)//缓冲池不空,通知消费者消费

   {

    Form1->Begin Consumer->Set Event ();

    }

    Form1->Produce Guard->Acquire ();

    i++;

    StrResult = IntToStr (i);

    J = Form1->buffer_size;

    Form1->Product [j] = i;

    Form1->buffer_size++;

    Synchronize(Show Result);//刷新界面,显示最新生产-消费状况

    Form1->Begin Consumer->Set Event();//通知消费者消费

    if(Form1->buffer_size == 5)//缓冲池满,挂起生产者线程,直到通知再生产

    {

   Form1->Begin Produce->Wait For (INFINITE);

    }

    Sleep (1000);

    Form1->Produce Guard->Release ();

  }

  While (Form1->buffer_size > 0)

  {

    Form1->Begin Consumer->Set Event ();

  }

  }

   消费者线程:

  

  Void __fast call TConsumerThread::Execute()

  {

    //---- Place thread code here ----

    Int j;

    For (int i = 0;i < 200;i++)

    {

   Sleep(100); //延迟,为清楚得显示执行效果

   Form1->Begin Consumer->Wait For(INFINITE);//挂起消费者线程,直到通知再消费

   J = Form1->buffer_size - 1;

   StrResult = IntToStr (Form1->Product [j]);

   Form1->buffer_size--;

   Synchronize(Show Result); //刷新界面,显示最新生产-消费状况

   if(Form1->buffer_size == 4)//缓冲池不再full,唤醒由于缓冲池full而挂起的生产者线程

   {

    Form1->Begin Produce->Set Event ();

   }

   Sleep (100);

    }

  }

  结论

  

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

  

精彩图集

赞助商链接