C++Builder 程序员博客
5 Sep
有一个函数,运行需要很长时间.
void fun();
假如button1用来执行这个fun(),
如果等不了,我想按button2停止这个函数.
想到的办法是将fun放在一个线程的execute()里.
刚才看了一下文档,Thread->Terminate();函数并不能结束该线程,而只是将它的Terminated属性改为true;
这怎么办呢?
可以在线程的函数Excute里面
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标志的代码来确定是否需要退出执行