Delphi中的线程类--之(4)[9]

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

本文简介:选择自 raptor 的 blog

然后创建一个event,接着进入临界区(通过全局变量threadlock进行,因为同时只能有一个线程进入synchronize状态,所以可以用全局变量记录),然后就是把这个记录数据存入synclist这个列表中(如果这个列表不存在的话,则创建它)。可见threadlock这个临界区就是为了保护对synclist的访问,这一点在后面介绍checksynchronize时会再次看到。

再接下就是调用signalsyncevent,其代码在前面介绍tthread的构造函数时已经介绍过了,它的功能就是简单地将syncevent作一个set的操作。关于这个syncevent的用途,将在后面介绍waitfor时再详述。

接下来就是最主要的部分了:调用wakemainthread事件进行同步操作。wakemainthread是一个tnotifyevent类型的全局事件。这里之所以要用事件进行处理,是因为synchronize方法本质上是通过消息,将需要同步的过程放到主线程中执行,如果在一些没有消息循环的应用中(如consoledll)是无法使用的,所以要使用这个事件进行处理。

而响应这个事件的是application对象,下面两个方法分别用于设置和清空wakemainthread事件的响应(来自forms单元):

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

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

go top