在Button中创建了n个FreeOnTerminate := True的线程(放在一个线程数组中),在退出程序中结束掉所有线程(有的线程已经执行完退出了,有的线程还在执行):
1. 当用Window的API函数TerminateThread,程序退出时总是出现异常:
"0x67f5d899" 指令引用的 "0x00000004" 内存。该内存不能为 "read"。
2.当使用Terminate时,能够正常退出,可是这个方法是要等待线程结束,如果线程很多的话就要等待很长时间。
现在想找一种方法,能正确的、完全的结束掉所有线程!多谢指教!

解决方案 »

  1.   

    另外我感觉API函数TerminateThread是把线程强制结束了,但是线程里面的资源并没有释放掉,这样理解不知道对不对?
      

  2.   

    我以前也遇到过这个问题,我当时是用个变通的方法。你看系统的任务管理器杀了你这个进程就没你说的这种问题。后来我用TerminateProcess来杀进程的方法让这个进程退出
      

  3.   

    你线程的execute里面要执行耗时的过程(一般是for循环反复执行一些内容)之前加上 
    if terminated then
    begin
    释放各种资源。。
    退出
    end;
    或者用个timer,隔几秒就判断一次你停止线程的时候,用mythread.terminated,而不用TerminateThread
    这样就应该没问题了
    不知你明白否
      

  4.   

    进程是完全杀掉了,就是进程中用到的资源没有释放 noproblem12说的有道理,就是有点浪费时间,要等到每个线程都结束了才能退出程序。看来只能找变通的方法了
      

  5.   

    我是检测每个线程的状态,只有所有的FREE掉了才退出.
      

  6.   

    工作线程没有全部结束.
    退出的时候把主窗体隐藏,检查IsMultiThread,为False的时候再关闭进程.前提是不是直接用CreateThread API创建线程.
    设定一个超时限制,如果超过,TerminateThread那些还没关闭的线程..再退出...CSDN论坛浏览器:http://CoolSlob.ys168.com/