【发布时间】:2013-06-01 07:46:05
【问题描述】:
我是线程新手,所以我已经尝试了几个小时(我正在使用 XE4),
我有一个简单的线程
type
TSendThread = class(TThread)
private
public
procedure proc(const s : string);
protected
procedure Execute; override;
end;
procedure TSendThread.proc(const S: String);
begin
showmessage(s);
end;
现在,在我的主要形式中,我想用以下方式调用“proc”:
procedure TForm1.Button1Click(Sender: TObject);
var
t : TSendThread;
begin
t := TSendThread.create(true);
t.Synchronize(nil, t.proc('foo'));
end;
但是每当我尝试编译时,我都会得到:
没有可以调用的“同步”的重载版本 有了这些论据
这没有意义(对我来说),因为当我从“proc”中删除“S”参数时它工作正常。
【问题讨论】:
-
首先,
Synchronize用于访问例如来自工人的主线程。不要在主线程中调用Synchronize。 -
嗯,这是我在向线程发送某些东西时发现的唯一方法(不使用创建过程并且没有“SendMessage”东西),无论如何都可以将值发送到线程并使用传递的值?
-
嗯,这是一个不同且相当复杂的主题。我敢肯定,如果你问一个问题,描述你想在你的(正在运行的?)工作线程中更改哪些 数据,有人会给你一个复杂的答案。
-
嗯,我只是想线程化 Indy IdHTTP,我想向线程发送 3 个参数(URL、GET/POST、lParam)。我想我可以只调用 Synchronize 方法...
-
@TLama:在主线程中调用
Synchronize()是完全安全的。它会立即执行指定的过程。这对于不知道是在主线程还是工作线程中调用的代码很有用。
标签: multithreading delphi