如等待的时间为3秒,若超过这段时间线程还没有结束,WaitForSingleObject 返回WAIT_TIMEOUT,这时不想线程再继续运行下去,请问这应该怎么关闭

解决方案 »

  1.   

    if WaitForSingleObject(hSignObj,3*1000)  = WAIT_TIMEOUT then
      //跳出线程执行,这有很多方法,如果你用的是delphi的TThread,你可以使用termited := true;
      //如果是自己的win32api创建的线程,那你自己根据需要跳出循环就行了,然后exitthread(0)调用
      

  2.   


    如你这里是要等待hSignObj这个线程结束,若超时的话,我想调用WaitForSingleObject的线程继续运行,而hSignObj(这个线程是会调用一些阻塞函数的,httpsendrequest之类的)这个线程不继续运行,我试了exitthread(0)这个好像是把调用WaitForSingleObject的线程停止了
      

  3.   

    结束其他线程可以使用TerminateThread函数,但是这个做法是非常不建议使用的的。因为你不知道其他的线程正在做什么。强行结束掉他是很粗鲁的行为,意味着你的代码设计得有问题。
      

  4.   

    httpsendrequest这个函数一阻塞就要等很长时间的,也想不到什么方法来处理
      

  5.   

    线程无法强制结束...请修改线程代码, 减小循环体. 我的BLOG有写这个部分.
      

  6.   

    lz只想用这个WaitForSingleObject 吗?
    可以尝试在主线程中用Terminate,
    在Execute中
        if Terminated then Break;
      

  7.   

    TerminateThread这个可用,不过要慎用
      

  8.   

          //最多等待3秒让工作者线程自行终止。
          if WAIT_TIMEOUT = WaitForSingleObject(f_MonitorThread.Handle, 3000) then
          begin
            TerminateThread(f_MonitorThread.Handle, 0);
          end;
      

  9.   

    顶下6楼
    TerminateThread,这个API 会强行终止线程,但是不会释放线程资源。容易造成内存泄露,用TTread自带的Terminate,然后 在线程中的Execute中加入
     while not terminated do
    begin
       //.....
    end;