while not Adoquery1.Eof do
begin
gjz:=adoquery1.fieldbyname('gjz').AsString;
thread:=tserch.create(gjz);
delay(800);
adoquery1.Next;
end;如何让这样创建的线程 暂停和 终止??

解决方案 »

  1.   

    暂停:thread.Suspend;
    继续:thread.Resume;
    停止:thread.Terminate; thread.WaitFor;
      

  2.   


    估计是你不会用。gjz:=adoquery1.fieldbyname('gjz').AsString; 
    thread:=tserch.create(gjz); 
    thread.Suspend;     //这行语句执行之后,如果线程还会继续执行的话,那就见鬼了
      

  3.   

    这个知道,我说的是在线程执行后,让他挂起!!
    如果只创建以个线程,,直接用thread.Suspend; 就可以了,这个我知道!!但是我的程序不是这样的,,就是说,不知道 可能会创建几个线程,,因为每过800毫秒创建一个线程,,,然后每个线程需要过几秒才能运行完毕,运行完毕后就自动销毁,,这样的循环创建 线程 该如何挂起,和唤醒呢???大家明白我的意思吗?
      

  4.   

    呵呵,这么回事。可是你都不知到有哪些线程,如何让他挂起和唤醒?如果要知道有哪些线程,可以这样:1  建立一个全局 TCriticalSection cs;
    2  建立一个全局 TList list;
    3  在线程入口加入
       cs.Enter;
       try
          list.Add(self);
    4  在线程的出口加入
       finally
         list.remove(self);
       end;这样你就有了一个线程的列表,要知道线程是否挂起,调用他的suspend属性就可以了,例如   if TThread(list[0]).suspend then ......
      

  5.   

    上面有点错误!如果要知道有哪些线程,可以这样: 1  建立一个全局 TCriticalSection cs; 
    2  建立一个全局 TList list; 
    3  在线程入口加入 
       cs.Enter; 
       try 
          list.Add(self);
       finally
          cs.Leave;
       end; 
    4  在线程的出口加入 
       cs.Enter; 
       try 
          list.Remove(self);
       finally
          cs.Leave;
       end; 这样你就有了一个线程的列表,要知道线程是否挂起,调用他的suspend属性就可以了,例如    if TThread(list[0]).suspend then ......