比如我有一个方法function1,在function1中创建一个线程是TThread的一个实例,对应的方法Execute,我想实现这样的功能,原来的方法要等到线程的Execute执行完毕,再往下执行,也就是说,function1中有一条语句是Execute,我要等到Execute执行完了再往下执行,不知道采取什么措施可以让他阻塞,Execute执行完了,再把它唤醒,望各位大哥大姐指教!谢谢!

解决方案 »

  1.   

    function1中的线程Execute开始执行后面增加判断:
    //hrd这个线程需要设置为自动销毁
    hrd.execute;
    while assigned(Hrd) do
        frm.caption :='wait';....继续下面的语句
      

  2.   

    不行啊,进入死循环了,我的线程初始化是这样的 
      Thread1:=TConnectThread.Create(False);
      Thread1.Priority:=tpNormal;
      Thread1.FreeOnTerminate:=True;
    而且你说的hrd.execute;是不是没有必要,我初始化线程后就会执行的把 
      

  3.   

    听得有点晕, fun1 建立线程, 想等线程的结果后继续执行?thread := txxxthread.create(...);
    thread.resume;
    thread.waitfor;
    ...
    取结果
    thread.free;
      

  4.   

    线程有个OnTerminate事件,把线程执行完后想执行的代码放在这个事件里面就可以了.Thread1:=TConnectThread.Create(True);
      Thread1.Priority:=tpNormal;
      Thread1.FreeOnTerminate:=True; 
      Thread1.OnTerminate := CustomEvent; //自定义的过程
      Thread1.Resume;
      

  5.   

    其实我想使用TIdTelnet控件,但是它提供的连接函数是仅仅连接机器,我想自己做一个函数,提供机器名,用户名,密码来自动的连接机器,并且能够判断连接失败和成功,如果失败的话,还能确定是主机不存在还是口令不对,由于是连接后要通过返回给客户的提示来分别输入用户和密码或者登录失败,因此我要做多线程,先通过一个线程来获取错误信息或者成功信息,再返回给主线程,不知道哪个大哥能给点意见,谢谢!
      

  6.   

    在线程里创建 hEventhEvent := CreateEvent(nil, FALSE, FALSE, nil);
    线程之行完后
    SetEvent(hEvent);
    if WaitForSingleObject(hEvent, INFINITE) = WAIT_OBJECT_0  then
    begin
      ..
    end;具体  WaitForSingleObject的用法可以参考msdn
      

  7.   

    fun1 建立线程, 想等线程的结果后继续执行? 
    是啊,那你这个线程又有什么做用啊!
      

  8.   

    fun1 建立线程, 想等线程的结果后继续执行? 
    是啊,那你这个线程又有什么做用啊!
      

  9.   

    如果我想利用TIdTelnet控件做一个函数例如Connect(host:string;user:string;pass:string):integer;由于TIdTelnet只提供用主机地址作为参数的函数,而且连接完后还要向服务器分别发送用户和密码,由于机器不存在的情况能通过捕获TIdTelnet的connect的异常来判断,但是口令错误的话,只能通过发送用户和密码完后服务器那边发送信息才能得出,我想做一个函数能够一次性的输入连接所有的参数机器地址,用户和密码,再通过结果返回连接的错误信息,希望大哥大姐帮帮我,最好能写一个简单的例子来帮我解决!谢谢