我的问题是:我新建了一个线程newthread, 在窗体上我有两个按钮,一个是使newthread
创建并运行线程中的代码;另一个按钮能终止线程并执行其他一段代码,我用newthread.terminate来终止线程,但还是会执行线程中的代码这是为什么啊?

解决方案 »

  1.   

    因为线程和Application的terminate都不是立即结束,而只是设置Terminated标记。你应该。在线程的Execute中执行时判断Terminated,如果是True则不要执行了。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    看Delphi的使用帮助,NewThread.Terminate过程只是将线程的Terminated属性设置为True,随后线程会定时地检查这个属性,发现它为True时就去结束自己!所以你创建了NewThread时她会先去执行代码(因为你不可能一开始就将Terminated设置为True,如果你这样做,也就刚被创建就会被杀死!),当你又调用NewThread.Terminat设置她的属性时,已经有代码被执行了!
      

  3.   

    我也遇到过这样的问题,当线程在执行时,用另外一个按钮来执行NewThread.Terminat似乎不行,因为在另外一个过程中NewThread似乎不能调用Terminat属性。期待高手。
      

  4.   

    在线程反复执行的地方不断检测ternimated,如果 true 则推出
      

  5.   

    我在线程的Execute中是这样写的:
    procedure autocheckThread.Execute;
    begin
      { Place thread code here }
      freeonterminate:=true;
      while not terminated do
       begin
         synchronize(autocheck);//autocheck是我具体执行一段代码的函数
       end;
    end;
    我是在不断检测terminated 属性的啊,但终止线程还是会执行线程中的代码啊?
      

  6.   

    freeonterminate:=true;不要这个,如果你要强制结束的话,否则就不要放在这里
      

  7.   

    看来你的 autocheck 有问题啊,它可能根本不能返回
      

  8.   

    线程的Execute中,if Terminated then exit;
      

  9.   

    嗯,同意楼上的观点,估计你的autocheck返回不了
      

  10.   

    建议你在synchronize(autocheck);//autocheck是我具体执行一段代码的函数
    加一个中断看看
      

  11.   

    up..在线程的Execute中,if Terminated then exit;