本帖最后由 jianye112 于 2011-11-02 01:05:26 编辑

解决方案 »

  1.   

    访问主窗体控件使用synchronize或sendmessage安全退出的话一直检测线程是否执行完,执行完的话释放线程资源。
      

  2.   

    在主窗体的closequery事件中,添加代码判断线程是否结束,如果没有结束根据你的情况或等待、或kill掉,之后把canclose设置成true。就ok了。
      

  3.   

    释放所有加载的DLL或者程序,线程之类的
    退出
      

  4.   

    我也想到用一楼的。用sendmessage,这样应该安全了吧。//线程里 
    sendmessage(form1.handle, threadmsg, ........//form1接收
    case 'threadmsg':
         dothreadmsg(...);//处理函数
    procedure dothreadmsg(...);
    begin
      EnterCriticalSection(Critical1);//这方式这同步还有效果的吧?
      try
        ....
      finally
      ........
    end;
      

  5.   

    TerminateProcess(GetCurrentProcess(), 0);//直接OK
      

  6.   

    我也碰到过这种情况,
    主要用2种方法:一是在主线程发出Terminate()后,延迟等待;另一种是在主线程里WaitForSignalObject(),线程运行时是无信号的,结束了有信号.不过杯具的是,在多个线程的情况下,主线程用WaitForSignalObject()等待的时间有点长,搞不明白哪出问题,所以干脆用Sleep()来等待线程释放(释放的时间比较固定,呵呵),简单
    可以参考下置顶贴或者这个贴子的讨论:http://topic.csdn.net/u/20110922/16/bcad403d-eb17-47d1-a284-3061a1fa53e6.html