delphi中Synchronize这个东东有什么用?我知道是线程同步使用的
是否是一个函数或变量,当一个线程在使用时,如果这个函数使用了Synchronize修钸的话就不允许别一个线程来调用这个函数
1楼:别的线程会等待该操作完成后才能继续
2楼:你说的基本是这个意思。它的目的是避免多个子线程同时访问主线程资源。
示例:
procedure ServerThread.ListItemEnd; //子线程的一个方法
begin
if (ListItem <> nil) then
ListItem.SubItems.Strings[3] := '传送完毕'; //ListItem是主线程的一个TreeView的一行
end;
procedure ServerThread.ClientExecute; //子线程执行
begin
Synchronize(ListItemEnd);
//如果直接写ListItemEnd,可能发生冲突。
end;
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”等字样,删除它们';
I.Desire := '加不加分随你';
—————————————————————————————————
3楼:当创建了多个线程,并且多个线程都要访问同一资源,,就有可能出现混乱,于是用Synchronize来控制,使同一时间只有一个线程使用那部分资源,Synchronize参数里面的代码就是多线程需要公共的代码!
4楼:1。synchronize方法的产生与vcl的局限性有关,因为vcl控件在同一时刻只能被单线程访问,如果多个线程同时访问vcl,vcl会出现问题。所以问了安全地访问vcl,Tthread类提供了一个方法叫synchronize,他可以让线程中的方法在主线程中执行,所以我们可以把访问vcl的代码都放在这个方法中,然后由主线程执行,从而确保vcl能被安全地访问调用.它的类型是TThreadMethod=procedure of object;procedure 参数:Sychronize(Method:TThreadMethod);
2。当创建一个线程时,vcl会在主线程中创建一个隐含的线程窗口,这个窗口的作用就是把synchronize调用的访问vcl的方法排队.synchronize把Method参数传递过来的方法保存在thread的fmethod字段中然后给线程窗口发一个cm_execproc消息,并把消息的lparam参数设为self,当线程窗口收到这个消息时,就调用Fmethod所制定的方法.
5楼:1.如果不访问vcl控件(vcl控件是不是就是窗口控件)是否也能用synchronize方法控制
2.如何获得线程的ID号
thx
6楼:加把油就完成了
7楼:1.如果不访问vcl控件(vcl控件是不是就是窗口控件)是否也能用synchronize方法控制
2.如何获得线程的ID号
================================
1、可以
2、TThread.ThreadID
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”等字样,删除它们';
I.Desire := '加不加分随你';
—————————————————————————————————
8楼:暴雪讲的有理..
VCL有一个缺陷就是不支持多线程访问..
为了弥补这一缺陷borland使用了synchronize这一方法控制对VCL的并发访问