关于,Synchronize 方法(100分)

  • 主题发起人 主题发起人 zyh_008008
  • 开始时间 开始时间
Z

zyh_008008

Unregistered / Unconfirmed
GUEST, unregistred user!
我在TThread 的定义里发现有
class procedure TThread.Synchronize(AThread: TThread;
AMethod: TThreadMethod);
procedure TThread.Synchronize(Method: TThreadMethod);
class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord);
请教一下, 谁对这三个 方法了解? 说说是什么意思, 实现什么效果
 
我是Delphi5,只有procedure TThread.Synchronize(Method: TThreadMethod);,另外两个没有,这个方法是把一个过程插到主线程中执行,以和主线程同步。
class procedure TThread.Synchronize(AThread: TThread;
AMethod: TThreadMethod);从定义上看好像是和另一个指定的线程同步,而非一定是主线程。
class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord);就看不出了。
 
那两个类方法没有调过,似过一般我们不需要去调吧.
我看了一下源码,那两个方法应该是Delphi内部调的.我们一般只要调那个实例方法就可以了.
 
其他的不用理,只用procedure TThread.Synchronize(Method: TThreadMethod);就可以
 
procedure TThread.Synchronize(Method: TThreadMethod);
将指定的方法同步到主线程里执行。
由于VCL不具有线程安全性,凡是线程中要有此类操作的代码,要用Synchronize同步。
类似的还有许多。
 
我觉得多线程根本没有什么安全可言,多个线程同时操作一个对象,根本不可能保证其安全,那些线程安全的对象(如TThreadList),也只是用临界量来控制的,说白了,就是一个时刻只有一个线程操作(单线),而Synchronize也是,不过是在主线程中创建一个隐含的窗体,执行Synchronize传过来的过程,线程中的代码都用Synchronize执行,那和单线程也没什么区别了。
--我的看法。
 
小雨哥 12:25:03
你是指单一对象,比如上次讨论的数据库操作,应该是对的。
小雨哥 12:25:52
不过,多线程还要再深化一下吧。比如对单一对象操作,我觉得先要做任务分配。
dirk 12:27:34
就好像对一个大的序列用线程分段处理?
dirk 12:38:01
嗯,是的,我转牛角尖了。
==============================
哈哈[:P]
 
我作了个实验, class procedure TThread.Synchronize(AThread: TThread;
AMethod: TThreadMethod);
比procedure TThread.Synchronize(Method: TThreadMethod);
多一个功能,可以指定要于之同步的线程,(主线程以外的线程)
上述两个过程都要调用到class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord);

:)
 
to dirk
我觉的多线程的最突出的特点就是 1平衡时间 2可以最大限度的完成任务
至于安全性,我觉的很好啊, 只是难于调试 (纯属个人愚见)

大家还有什么更多的认识吗
apw ,dirk ,kouchun ,proman 感谢几位的提示,谢谢
 
VCL是线程不安全的,多个线程同时操作一个VCL对象某些方法时,会出现错误(看看我的帖子),看看TThreadList、TList的代码,体会一下二者的区别,使用线程时如果不注意这点,就不仅是难于调试的问题了。
 
后退
顶部