我发布了一个question混淆了我关于多线程,我还没有找到答案在线。假设我已经创建了类似TTest = class(TThread)
的东西,所以你可以想象我有一个执行。它里面我可以打电话:德尔菲队列和同步参数
Synchronize(procedure
begin
//code
end);
Queue(procedure
begin
//code
end);
从我所了解上面的代码匿名方法,在Self
之前应该有另一个隐藏的参数。假设现在我不在派生类(如TTest)中,并且处于按钮单击事件中。我可以称之为:
TTask.Run(
procedure
begin
TThread.Queue(nil,
procedure
begin
testB.Text := 'Please wait...';
end;
TThread.Queue(nil,
procedure
begin
testB.Text := 'Please wait MORE...';
end;
end);
在这里,我已经使用零作为参数,因为(如果我是正确的),如果我叫TThread.CurrentThread
,当队列完成其他将因RemoveQueuedEvents被删除()。
所以我的真正的问题是:如何确定时,我必须通过nil
或TThread.CurrentThread
?
我已经明白,在派生类的TThread的像TTEST以上我可以叫Queye /同步只用匿名方法,因为
Self
来抢救。如果我必须在TTask.Run中调用Queue或Synchronize,例如,我确定必须使用nil参数吗?
我是新来的这种事情,所以我觉得这很难,我想了解这个概念,否则我会创建破碎的应用程序。我看到Nick Hodges在他的书中使用了零和CurrentThread,但我不明白为什么。
因此,如果我总是使用不会危险的零参数?但是我仍然需要知道何时可以使用TThread.CurrentThread。 –
我可以看到在任何情况下都不需要使用CurrentThread。实际上你无法访问匿名方法中的那个参数。 –
我只是希望我的程序是线程安全的,所以您确认我始终可以使用nil作为参数。我要去接受 –