问题:delphi xe中同时等待几个匿名线程,运行结果错误
描述:delphi等待匿名线程
我原本是想同时创建几个线程,写入数字在memo中.然后等待全部线程全部完成后写入ok.
可问题是运行后结果错误如下.
1:等待不到结束线程.超时3秒过后写入ok.然后再写入数字.
2:原本我想写的应该是0-5的数字,可运行后结果基本是写入6最多.(为何不是0-5?)
代码如下.我该如何改?没cb了.请各位不吝赐教.
var
Testthread: TThread;
Waitthread: TWOHandleArray;
i: integer;
begin
memo1.Clear;
for i := 0 to 5 do
begin
Testthread:= TThread.CreateAnonymousThread(
procedure
var
k: integer;
begin
k:= i;
memo1.Lines.Add(IntToStr(k));
end);
Waitthread[i]:= Testthread.Handle;
// Testthread.FreeOnTerminate:= True;
Testthread.Start;
end;
WaitForMultipleObjects(6, @Waitthread, false,3000 );{INFINITE}
memo1.Lines.Add('ok');
end;
解决方案1: 你这个代码2个问题
1、不能在线程中直接操作VCL控件。
2、 k := i;执行的时候,可能i已经不是原来的值了,所以出现你所说的6居多,你可以设想极端情况,线程start后并未马上切换到线程执行,但是你创建匿名线程的那个线程,已经全部跑完,这个时候i=6,然后系统线程切换,你想那些线程k是不是等于6呢?
- 明星图片
- 相关文章
-
联系邮箱:mxgf168#qq.com(#改为@)