有一个函数,运行需要很长时间.
void fun();
假如button1用来执行这个fun(),
如果等不了,我想按button2停止这个函数.
想到的办法是将fun放在一个线程的execute()里.
刚才看了一下文档,Thread->Terminate();函数并不能结束该线程,而只是将它的Terminated属性改为true;
这怎么办呢?

可以在线程的函数Excute里面

C/C++ code
void __fastcall TChangeLabel::Execute() { if(!Terminated) { //你这个里面要做的事情 } //—- Place thread code here —- }

当你Terminate()时函数线程里面就不会执行了

引用 2 楼 jxw1987628 的回复:
可以在线程的函数Excute里面

C/C++ code
void __fastcall TChangeLabel::Execute()
{
   

    if(!Terminated)
    {
        //你这个里面要做的事情
    }
    //—- Place thread code here —-
}

当你Terminate()时函数线程里面就不会执行了

if(!Terminated)
    {
        fun();
    }
关键就是fun();函数还在执行,你无法中断它

那你还是在函数里面设置一个标志好了,为true是返回就ok了

2楼的做法是最恰当的。

强制退线程只有用:BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);
一般情况下,线程运行结束之后,线程函数正常返回,但是应用程序可以调用TerminateThread强行终止某一线程的执行。各参数含义如下:
  hThread:将被终结的线程的句柄;
  dwExitCode:用于指定线程的退出码。
使用TerminateThread()终止某个线程的执行是很不安全的,可能会引起系统不稳定;虽然该函数立即终止线程的执行,但并不释放线程所占用的资源。因此,一般不建议使用该函数。

建议还是采用Thread->Terminate();
并在fun()中加检查Terminated标志的代码来确定是否需要退出执行