我有一个程序使用了一个线程来执行一些工作。该线程应通知另一个线程(在本例中为主线程)进度情况。
如果我使用Synchronize()进行同步,一切都按预期运行。如果我与主线程同步并发布for变量并将其放入列表中,则每个值都会正确打印到我的ListBox中:
如果我使用Synchronize()进行同步,一切都按预期运行。如果我与主线程同步并发布for变量并将其放入列表中,则每个值都会正确打印到我的ListBox中:
procedure TWorkerThread.Execute;
var
i: Integer;
begin
inherited;
for i := 1 to 1000 do
begin
Synchronize(
procedure()
begin
FireEvent(i);
end);
end;
end;
输出:1、2、3、4、5...1000
如果我使用Queue()来执行同步,输出结果不符合预期:
procedure TWorkerThread.Execute;
var
i: Integer;
begin
inherited;
for i := 1 to 1000 do
begin
Queue(
procedure()
begin
FireEvent(i);
end);
end;
end;
输出结果: 200、339、562、934、1001、1001、1001、1001、1001、1001、1001、1001、1001、[...]
这里发生了什么?按我的理解,匿名程序应该捕获变量“i”吗?