【发布时间】:2014-01-28 15:32:51
【问题描述】:
创建线程对象时,我想从需要同步的应用程序中调用代码。问题是我不知道如何为带有参数的应用程序函数调用Synchronize。
假设我们有
procedure ThreadObject.Execute;
var
val1,val2:integer;
Star:string;
begin
Synchronize(funcyfunc); //how to pass val1,val2,star here?
end;
funcyfunc 定义如下
procedure OtherClass.funcyfunc(param1,param2:integer;spok:string);
begin
letsCallFriends(spok,param1);
letsCallFriends(spok,param2);
end;
现在解决这个问题的奇怪方法是在 ThreadObject private 中说
private
star:string;
val1,val2:integer;
procedure starVal;
在实现中我们会这样做
procedure ThreadObject.starVal;
begin
funcyfunc(Star,val1,val2);
end;
在线程执行中我们更改为
procedure ThreadObject.Execute;
var
val1,val2:integer;
Star:string;
begin
Synchronize(starVal); //how to pass val1,val2,star here?
end;
但这很麻烦,因为每个过程调用都必须有一个全局变量。有没有更好的办法?
代码:
unit ThreadObject;
interface
uses
Classes;
type
TThreadObject= class(TThread)
private
star:string;
val1,val2:integer;
procedure starVal;
protected
procedure Execute; override;
//assume we have a constructor that ini the star val1 val2.
end;
implementation
{ TThreadObject }
procedure ThreadObject.Execute;
var
val1,val2:integer;
Star:string;
begin
Synchronize(starVal); //how to pass val1,val2,star here?
end;
procedure ThreadObject.starVal;
begin
funcyfunc(Star,val1,val2);
end;
end.
【问题讨论】:
-
有一篇很棒的博客文章处理了这个uweraabe.de/Blog/2011/01/30/…
标签: multithreading delphi delphi-2009 synchronize