我建了一个线程,用来定时去取信号,如果系统退出的话,该线程的资源不能释放,我已经试了很多方法了
(不过我在FreeOnTerminate设的是true,应该不用我手动释放吧?)
但是程序在结束的时候,总是要等待,然后就弹出错误的提示框,说access violation at ×××,我是这样释放的      
thread.Terminate;
thread.Free;

解决方案 »

  1.   

    设置完freeonterminate后,在线程中是需要不断检测的。
      

  2.   

    thread.Terminate;
    thread.Free;?? 应该不需要 后面那句话吧 看的好别扭。
      

  3.   

    不需要free?
    我要释放的主要是指线程的。就terminate?
      

  4.   

    你的thread是什么类型的?? 
    我们说释放线程所占用的资源 不是说释放它本身。。
      

  5.   

    1. 你保证它是用Create出来的
    2. 你释放的位置在哪儿呢 可能超前了 你可以试着将Free的位置放到最后面
    比如 Form的OnCloseQuery..
      

  6.   

    在关闭窗口的时候是先执行close还是先执行destory啊?
    是create出来的
      

  7.   

    还要说明一下,我建立了一个线程a,然后在程序中又通过acreate出一个b,主要是用b实现操作
      

  8.   

    beyondtkl(大龙驹<梦.考古广告人生>)
    说得没错
    释放位置估计有问题
    如果你对Windows比较熟练,也可以直接用CreateThread建立线程,我喜欢用这个。:)
      

  9.   

    1.首先,线程中的execute方法中的循环中要加入退出代码,如:
         while not thread.Terminated do
       begin
         
       end;2.在释放的时候要这样写:
      thread.Terminate;
      thread.WaitFor;//不写得方法名是不是这样,反正有WaitFor
      thread.Free;
      

  10.   

    用waitfor的话,要等很长时间啊,几乎是无法忍受的!说实话,线程的部分不是我写的,只是我查过了,是在destory的时候释放的
      

  11.   

    是不是这样写的?
       while not thread.Terminated do
       begin
         定时去取信号//**
       end;好象程序一直停留在**处,当手动释放,thread.Terminate;的时候,根本程序还在执行**处的代码,所以线程也收不到退出信号。所以没释放,关闭是出错。我也遇到类似的问题,是这样想的,也没解决。
      

  12.   

    差不多
    主要是线程我不懂,程序不是我写的,现在我接手,就遇到这么棘手的问题,唉有的时候出现的错误是
    access violation at address ×× in module idapi32.dll
      

  13.   

    用waitfor要等很长时间的话,
    那绝对是线程写得不好或者线程每循环一次做的工作太耗时间了。要么改写线程,要么使用waitfor多等等吧
      

  14.   

    应该就是这个问题,我的那个程序是在线程里等待接收服务器端的消息,readln(),就是一直停在那里。没办法我最后就把这段程序给去了。用timer呢?定时操作,onclosequery里面enable。