V
virtualmfc
Unregistered / Unconfirmed
GUEST, unregistred user!
在《Delphi 5开发人员指南》这本书的第11章“编写多线程应用程序”中有一个”多线程与数据库“的小节,讲解
了如何利用线程进行数据库的检索工作以及利用线程更新界面。但其中的Execute()方法值得考虑。
因为按照Delphi中的说法,一般Delphi中的VCL并非线程安全的,所以应放在一个用synchronize调用的方法
当中进行处理,然而在TDBQueryThread.Execute方法中,有这么几条语句:
procedure TDBQueryThread.Execute;
begin
try
FQuery.open;
synchronize(HookUpUI);
except
...
synchronize(QueryError);
end;
end;
procedure TDBQueryThread.HookUpUI;
begin
FDataSource.DataSet := FQuery;
end;
以上这两个方法同用了VCL组件。不过一个使用了TQuery,一个使用了TDataSource,按我的想法,FQuery.Open也应放在synchronize方法之中,即
HookUpUI中,大家认为呢?或者说我对synchronize的理解有误?
了如何利用线程进行数据库的检索工作以及利用线程更新界面。但其中的Execute()方法值得考虑。
因为按照Delphi中的说法,一般Delphi中的VCL并非线程安全的,所以应放在一个用synchronize调用的方法
当中进行处理,然而在TDBQueryThread.Execute方法中,有这么几条语句:
procedure TDBQueryThread.Execute;
begin
try
FQuery.open;
synchronize(HookUpUI);
except
...
synchronize(QueryError);
end;
end;
procedure TDBQueryThread.HookUpUI;
begin
FDataSource.DataSet := FQuery;
end;
以上这两个方法同用了VCL组件。不过一个使用了TQuery,一个使用了TDataSource,按我的想法,FQuery.Open也应放在synchronize方法之中,即
HookUpUI中,大家认为呢?或者说我对synchronize的理解有误?