Delphi中的线程类--之(5,大结局)[4]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 raptor 的 blog

在这里用一个局部变量localsynclist来交换synclist,这里用的也是一个原语:interlockedexchange。同样,这里也是用临界区将对synclist的访问保护起来。

只要localsynclist不为空,则通过一个循环来依次处理累积的所有同步方法调用。最后把处理完的localsynclist释放掉,退出临界区。

再来看对同步方法的处理:首先是从列表中移出(取出并从列表中删除)第一个同步方法调用数据。然后退出临界区(原因当然也是为了防止死锁)。

接着就是真正的调用同步方法了。

如果同步方法中出现异常,将被捕获后存入同步方法数据记录中。

重新进入临界区后,调用setevent通知调用线程,同步方法执行完成了(详见前面synchronize中的waitforsingleobject调用)。

至此,整个synchronize的实现介绍完成。

 

最后来说一下waitfor,它的功能就是等待线程执行结束。其代码如下:

function tthread.waitfor: longword;

var

  h: array[0..1] of thandle;

  waitresult: cardinal;

本文关键:Thread Event CriticalSection Synchronize
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top