//代码如下
unit UClear;interfaceuses
  ...
type
  TfrmMain = class(TForm)
    ...
  private
   ...
  public
  ...
    thdClear:array of ClearThread;  //定义线程数组
    ...
  end;
...
function TfrmMain.initThread(): integer ;   //初始化线程
var
i,j:integer;
begin
  ...   // 计算线程开其数量   
setlength(thdClear,ThreadNum);     while not bEnd do    //如果没有完成继续循环
    begin
      for i:=0  to (ThreadNum - 1)  do
         begin
            thdClear[i].Create(TRUE);
//下面开始出错==============================================
           if (thdClear[i].delEnd) and (not qryClear.Eof)  then  //如果此线程空闲并且数据纪录未完,
                                                                 //delEnd检查线程工作是否完成
               begin                                  
                 for j:=0 to high(thdClear[i].imgList) do
                    begin                       
                      thdClear[i].imgList[j]:=...                     
                      Next;
                    end;
                  thdClear[i].delEnd:=false;                    
                  thdClear[i].Resume;
                end;
          end; 
        sleep(100); //每0.1秒检查一次线程队列,察看有无空闲线程
        isEnd;     //在此检查复制工作是否完成,改变bEnd值
    Application.ProcessMessages;
  end; 
end;...
end.

解决方案 »

  1.   

    报什么错,你最好跟踪调试一下,是否数组下标越界什么的,还有你那个delEnd是什么?
      

  2.   

    delEnd是线程的一个成员变量,检查线程工作是否完成
    报错:Access violation as address 00424ca4 in module '程序名'.Write of address 0000000E.
      

  3.   

    我认为当你While和for两重循环中不停的创建thread应该有问题的。
      

  4.   

    不循化也出错,就是取消循坏,直接开启thdClear[0].Create,照样出错。埃
      

  5.   

    可能是你线程Create的时候出现了问题,你能不能把Create里面的代码帖出来看看
      

  6.   

    "thdClear[i].Create(TRUE);"???
    这句有错,改为 thdClear[i] := ClearThread.Create(TRUE);
      

  7.   

    谢谢,jhwh(弹剑长歌) 
    问题解决,怪我太粗心