做了一个ftp下载程序:创建一条控制线程,控制线程又创建10条子线程用来下载上传。在控制线程中循环判断所有的子ftp线程是否都已经执行完成。
现在想问如何让程序等待控制线程执行完后再继续执行以后的程序?

解决方案 »

  1.   

    看一下置顶的贴子就可以了
    http://topic.csdn.net/u/20110217/11/56577c65-2e77-4f8f-b541-0be47cdb4d60.html?69977
      

  2.   

    ControlThread:=ControlThread.Create(true);
    ControlThread.Resume;
    while true do
    begin
      if ControlThread.isEnd then
      begin
        break;
      end;
      sleep(0);
    end;
    showMessage('OK');
    这样写的话,所有的线程都不干活了。ControlThread:=ControlThread.Create(true);
    ControlThread.Resume;
    //在这做些什么能等ControlThread释放了再showMessage
    showMessage('OK');
      

  3.   


      //Do something;
     dwet := WaitForSingleObject(需要等待结束的线程句柄, INFINITE);//如果等待多个线程用WaitForMultipleObjects
      

  4.   

    其实你的控制线程完全可以用WaitForMultipleObject来等待所有FTP线程都执行完毕然后继续往下执行
    type
      TBasicThread = class(TThread)
      protected
        procedure Execute; override;
      public
    end;var
      tContrlThread:TBasicThread;//控制线程
    .......主程序中
      WaitForSingleObject(tContrlThread.Handle, INFINITE);//主程序会一直等待直到控制线程结束在控制线程的Execute可以这样
      WaitForMultipleObject(FTP线程数目,FTP线程句柄数组,TRUE,INFINITE);//会等到所有线程都执行完毕才会继续往下执行
    不过以上方法有个弊端就是如果你的FTP线程有一个进入了死循环无法正常返回,控制线程就会一直等待下去