北方站长站
客服热线:0632-5117766

C++Builder的多线程编程中一些体会

[2007-11-16 00:00:00] 作者:Northz.com 来源:北方站长站

Tags:体会 一些 编程 线程 访问 变量 方法 事件 返回 公用

  

CB相对于VC来说,在CB下写多线程程序是很简单的。不仅是VCL中有TThread这个类。封装了那些关于多线程的WINDOW API。我觉得更方便的是他提供了k54北方站长站
直接访问主VCL线程中对象的能力。可以很容易的和主线程中的窗体,控件k54北方站长站
打交道。和单线程的方式没有太多区别。只是在有多个线程都要访问主线程k54北方站长站
中的对象(比如访问同一个窗体上的StringGrid).只要用Thread的Synchronize方法来调用那段访问主VCL线程的代码(具体请看帮助),我们就不用担心访问冲突的问题了。而且对于多线程的同步和互斥,CB也对WINDOW 编程中那些机制进行了封装。比如对临界区CriticalSection封装为TCriticalSection.事件Event封装为TEvent.这些类相当简单好用。k54北方站长站
下面就是我觉得比较重要的几点,供大家参考.k54北方站长站
k54北方站长站
1。TThread的WaitFor方法。是等待一个线程返回。其返回值在这个线程里可以任意设定。以便在该线程返回的时候让调用他的线程知道他的运行情况。 k54北方站长站
  k54北方站长站
在TThread的 OnTerminate事件中做线程的清除工作。他不是线程运行的一部分。 k54北方站长站
而是主VCL线程的一部分。所以在其中不能访问Thread的局部变量(如 int __thread i) k54北方站长站
你可以把清楚代码写在这里,不用管现在在EXCUTE()方法执行到了哪个地方。 k54北方站长站
这么看起来有点类似于C++里的 finally 块的作用。 k54北方站长站
  k54北方站长站
2。TEvent很重要。实现线程的同步。WaitFor(int Timeout)功能类似于 k54北方站长站
WINDOW API WaitforSingleObject().返回值包括: k54北方站长站
其中参数Timeout可以设为INFIN99vE表示永久等待,但这样,程序很容易死在这里。 k54北方站长站
    k54北方站长站
wrSignaled 该事件发生(成功返回). k54北方站长站
wrTimeout 等待超时. k54北方站长站
wrAbandoned 在该事件的超时期限到达前,该事件对象已经被毁灭了。. k54北方站长站
wrError 在等待过程中有异常产生,要知道具体产生的错误要查看 TEvent的LastError k54北方站长站
属性。 k54北方站长站
  k54北方站长站
3 TCriticalSection k54北方站长站
这个相当于WIN32编程中的临界区。 k54北方站长站
在多线程编程中,多个线程需要访问同一个公用变量的时候。 k54北方站长站
  k54北方站长站
来保证访问的正确性。对公用变量访问的代码写在Enter();和Leave()之间。 k54北方站长站
比如有个公用变量 Count; k54北方站长站
以下代码 : k54北方站长站
TCriticalSection * pSection=new TCriticalSection(); k54北方站长站
   pSection->Enter(); k54北方站长站
  Count++; k54北方站长站
   pSection->Leave(); k54北方站长站
delete p; k54北方站长站
  k54北方站长站
Enter()方法进入临界区,对其中的公用变量加锁。 k54北方站长站
Leave()方法离开临界区,对其中的公用变量解锁。 k54北方站长站
  k54北方站长站
  k54北方站长站
4.TMultiReadExclusiveWriteSynchronizer k54北方站长站
用来处理类似于多个生产者和多个消费者的问题。这里的消费者是指k54北方站长站
对公用变量进行读操作的线程。k54北方站长站
生产者是对公用变量进行写操作的线程。k54北方站长站
四个方法。k54北方站长站
  BeginReadk54北方站长站
  EndReadk54北方站长站
这两个方法用于消费者。k54北方站长站
  BeginWritek54北方站长站
  EndWritek54北方站长站
这两个方法用于生产者。k54北方站长站
使用的时候就是要把这个TMutiReadExclusiveWriteSynchronizer 定义一个全局变量。然后在其他线程中访问他。k54北方站长站

k54北方站长站

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

下一篇链接:C++Builder代码片断

上一篇链接:C++Builder中大尺寸图象的显示技巧

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面