【发布时间】:2017-02-16 17:31:33
【问题描述】:
我正在在线阅读 Nick Hodges,我发现了队列,但它的行为与我预期的不同,我无法理解他和文档所说的内容。看这段代码:
TThread.CreateAnonymousThread(
procedure
begin
TThread.Queue(TThread.Current, procedure
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('start');
end);
Sleep(2000);
TThread.Synchronize(TThread.Current, procedure
begin
Memo1.Lines.Add('end');
end);
end
).Start;
我总是使用Synchronize,但这次我尝试使用Queue,因为根据尼克的说法,在多个请求的情况下会更好,因为它们不会被“序列化”并一一执行。上面的代码工作正常。为什么这不起作用?
TThread.CreateAnonymousThread(
procedure
begin
TThread.Queue(TThread.Current, procedure
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('start');
end);
Sleep(2000);
TThread.Queue(TThread.Current, procedure
begin
Memo1.Lines.Add('end');
end);
end
).Start;
在这种情况下,备忘录输出start,但不是结尾。当我打电话时:
- 第一个同步,第二个同步
- 第一个队列,第二个同步
- 两次排队都不起作用,因为我在备忘录中只看到了
start
【问题讨论】:
标签: multithreading delphi