现在我在做一个含有线程的程序,其中这个线程是有几个自定义的进程串在一起组成的,进程中包含ADO对象(多线程组件),运行时发现,该线程可以全速运行,挂起,但不能terminate,在试图使用挂起后,再free的方法也不能实现,而且出现程序死掉的情况,线程开始一开始运行就设置freeonterminate:=true,请问高手,这是怎么回事,希望大家尽快帮忙,小弟在这给大家跪下啦~~~~~~
另外本人对文件打印颇有一点心得,谁有兴趣要?

解决方案 »

  1.   

    可能线程没有处理Terminated这个消息吧
    用Delphi的TThread线程,需要自己监控Terminated的,发现的时候,自己退出因为Terminate方法,只是发送了一个标志了而已需要正真强行关闭,就用API的TerminateThread,慎用哦~
      

  2.   

    那就再循环中多次检查Terminated这个变量。对于很长时间才循环的线程我都是这么做的。这样可保证线程及时相应Terminate。如果不想麻烦就直接使用TerminateThread。
      

  3.   

    我的直觉,要是越复杂的线程,Terminated这个变量只是一个线程的一个属性,所以得最好用指针:
    指向它:
     VAR P:PBOOLEAN;
     BEGIN
      P:[email protected];
     EDN;
    然后用于线程的各个部分.....试一下哦!
    另一种是干脆用一个VAR STOP:BOOLEAN;变量,用线程类加载和读取......
      

  4.   

    以上是我的经验......唉就是一个@符号,当然,在用时则要: IF  P^ THEN EXIT;
    当你用Terminate过程时,线程就会将P设为TRUE!
      

  5.   

    看一下这篇文章,也许也会有一点心得。
    http://blog.csdn.net/linzhengqun/archive/2006/01/07/572557.aspx