问题: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呢?

上一篇如何写一个这样的demo
下一篇请问delphi中SampleGrabber控件的Onbuffer事件怎么调用?
明星图片
相关文章
《delphi xe中同时等待几个匿名线程,运行结果错误》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)