IsQuit := GetExitCodeThread(aThread.Handle, i);
不管是在调试状态还是编译状态,有时到这一步的时候(X小时-XX小时)就会跳出内存读取错误,使用TRY..Except看错误代码显示的又是"语句正确执行"(大概就这意思),难道大家用这句的时候都没有碰到过吗?

解决方案 »

  1.   

    看看getlasterror返回什么,aThread.Handle还有效吗
      

  2.   

    getlasterror显示没有错误,athread.handle前面有用if Assigned(aThread) then判断,有效才执行getexitcodethread的,贴上完整代码吧:
      if Assigned(aThread) then
      begin
        IsQuit := GetExitCodeThread(aThread.Handle, i);
        if IsQuit then 
        begin
          if i = STILL_ACTIVE then 
            Result := 1
          else
            Result := 2; 
        end;
      end;
      

  3.   

    问题终于找到,出在Assigned(aThread)上,它返回为真的时候,线程并不一定真的存在,所以调用getexitcodethread就会出错.但是除了assigned还有什么函数能准确判断线程是否存在呢?继续等待高手来回答.
      

  4.   

    handle有效不等于线程未结束。
    可以改用waitforsingleobject来等待线程结束比较好。
    athread = Tathread.create;
    waitforsingleobject(athread.handle,INFINITE);//等待athread结束
    anycode...到//a已经结束了
      

  5.   

    因为某些原因不能用waitfor,除此之外就没办法了么?