关于线程的问题:
1、一个线程的OnTerminate事件什么时候发生?有书上说,如果将FreeOnTerminate的属性设为True,当一个线程终止时,就会触发OnTerminate事件。这对吗???
2、一个线程的Execute执行完毕以后就会退出,如果我创建了一个线程类,然后Execute,当执行完以后是不是这个线程类也会自己Free呢?
3、有没有什么办法强行的终止一个线程。我知道TerminateThread(),有没有其他的办法呢?
4、线程的“退出”是什么概念?他和“Free”有什么区别呢?
5、我如何让OnTerminate里发生我要的事情呢?是在主线程里指定还是在线程类里指定?

解决方案 »

  1.   

    1.OnTerminate事件不管FreeOnTerminate是否为True,都会触发
    2.FreeOnTerminate为True才会Free
    3.Thread.terminated;结束
    4.线程中止,但不一定Free;Free了一定中止
    5.在主线程创建时指定
    如:
    with TBubbleSort.Create(BubbleSortBox, BubbleSortArray) do
        OnTerminate := ThreadDone;
      

  2.   

    OnTerminate事件在Thread的Execute方法返回之后destroy之前发生,
    发生时机与FreeOnTerminate是否为True。
      FreeOnTerminate为True时,在线程Terminate的时候自动释放
      

  3.   

    OnTerminate事件在Thread的Execute方法返回之后destroy之前发生,
    发生时机与FreeOnTerminate是否为True无关
      FreeOnTerminate为True时,在线程Terminate的时候自动释放
      

  4.   

    所谓的自动释放是指什么呢?是指释放线程里建立的对象还是只Free其本身呢?
    还有就是,如果我的线程的Execute事件里没有检查terminated,那么主线程把一个子线程Thread.terminated,也会终止线程吗?
    “终止”和“退出”上一个概念吗?
    如果我的Execute方法里没有写FreeOnTerminate,在我Thread.terminated以后是不是我要手工的去Free掉这个线程呢?
      

  5.   

    帮楼主顶!!!!顺便学习ing
      

  6.   

    你把那些线程内创建的对象全部在destroy析构函数内释放
    线程退出时会执行这个函数,当你关掉主线程时,它会帮你清扫垃圾
      

  7.   

    bee2518(迷茫ing) 说的已较全.
    如果要在主线程(主程序)中止线程,最好在线程中EXCETE中加一个判断if terminated then ...线程中若有循环就跳出循环体,或关闭线程打开的东东 ...