我是新手,所以我已经尝试了几个小时(我正在使用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;
Run Code Online (Sandbox Code Playgroud)
现在,在我的主要表单中,我想用"proc"来表示:
procedure TForm1.Button1Click(Sender: TObject);
var
t : TSendThread;
begin
t := TSendThread.create(true);
t.Synchronize(nil, t.proc('foo'));
end;
Run Code Online (Sandbox Code Playgroud)
但每当我尝试编译,我得到:
没有可以使用这些参数调用的"Synchronize"的重载版本
这对我来说没有意义,因为当我从"proc"中删除"S"参数时,它工作正常.
窃取 Uwe Raabe 的文章 使用参数进行同步和队列我这样做:
if GetCurrentThreadID = MainThreadID then
FDataLogger(IntToStr(lNrItems) + ' elements:')
else
TThread.Synchronize(nil,
procedure
begin
FDataLogger(IntToStr(lNrItems) + ' elements:');
end);
Run Code Online (Sandbox Code Playgroud)
但如果我只是
TThread.Synchronize(nil,
procedure
begin
FDataLogger(IntToStr(lNrItems) + ' elements:');
end);
Run Code Online (Sandbox Code Playgroud)
这似乎也有效。
由于第一个构造会导致更多代码,那么区分主线程真的有很多好处吗?