现在的问题是,当工作者线程运行起来后,我按下按钮B结束线程(此时工作者线程里的工作还没有完成,假设才进行了一半),我现在的程序是要等好半天才能结束,怎样才能立即结束这个工作者线程呢?
18 个解决方案
#1
AfxEndThread(一)void AFXAPI AfxEndThread(UINT nExitCode,
BOOL bDelete = TRUE);//函数原型声明1
(二)void AfxEndThread(UINT nExitCode);//函数原型声明2
此方法用于终止当前正在执行的线程,必须在当前线程内部调用才能生效。
返回值:void
参数:
nExitCode: 32位的线程的退出码,该退出码由GetExitCodeThread方法获得。
bDetete: 是否从内存中删除线程对象,默认值为TRUE。
必要条件:
Windows CE 2.0以上版本。头文件声明在Afxwin.h中。
基于平台: 个人计算机,掌上电脑,小型机。
相关词条:AfxBeginThread TerminateThread GetExitCodeThread
参考:MSDN
BOOL bDelete = TRUE);//函数原型声明1
(二)void AfxEndThread(UINT nExitCode);//函数原型声明2
此方法用于终止当前正在执行的线程,必须在当前线程内部调用才能生效。
返回值:void
参数:
nExitCode: 32位的线程的退出码,该退出码由GetExitCodeThread方法获得。
bDetete: 是否从内存中删除线程对象,默认值为TRUE。
必要条件:
Windows CE 2.0以上版本。头文件声明在Afxwin.h中。
基于平台: 个人计算机,掌上电脑,小型机。
相关词条:AfxBeginThread TerminateThread GetExitCodeThread
参考:MSDN
#2
在一系列工作之间加入线程是否结束的判断,缩短两次线程结束条件判断之间的间隔时间。
#3
我也考虑这个办法了,无奈步骤太多了,能不能有更简洁了当的办法呢?
#4
这算强制退出线程吗?
#5
3种方法,一种就是上面说的,一种就是强制退出,还有就是你在关闭的时候用另一种机制来等待。
#6
最好等它完成再结束,要不只能强制结束,不过,可能有内存泄露,这在《windows核心编程》第五版上有详细说明
#7
强杀线程 我从来没这么搞过.
就是线程循环搞个flag termnate而已就行了.
就是线程循环搞个flag termnate而已就行了.
#8
AfxEndThread(一)void AFXAPI AfxEndThread(UINT nExitCode,
BOOL bDelete = TRUE);//函数原型声明1
(二)void AfxEndThread(UINT nExitCode);//函数原型声明2
此方法用于终止当前正在执行的线程,必须在当前线程内部调用才能生效。
返回值:void
参数:
nExitCode: 32位的线程的退出码,该退出码由GetExitCodeThread方法获得。
bDetete: 是否从内存中删除线程对象,默认值为TRUE。
必要条件:
Windows CE 2.0以上版本。头文件声明在Afxwin.h中。
基于平台: 个人计算机,掌上电脑,小型机。
相关词条:AfxBeginThread TerminateThread GetExitCodeThread
参考:MSDN
BOOL bDelete = TRUE);//函数原型声明1
(二)void AfxEndThread(UINT nExitCode);//函数原型声明2
此方法用于终止当前正在执行的线程,必须在当前线程内部调用才能生效。
返回值:void
参数:
nExitCode: 32位的线程的退出码,该退出码由GetExitCodeThread方法获得。
bDetete: 是否从内存中删除线程对象,默认值为TRUE。
必要条件:
Windows CE 2.0以上版本。头文件声明在Afxwin.h中。
基于平台: 个人计算机,掌上电脑,小型机。
相关词条:AfxBeginThread TerminateThread GetExitCodeThread
参考:MSDN
#9
结束线程共有四中方法,线程函数返回、ExitThread函数、TerminateThread函数、在进程终止运行时撤消线程。方法间的差别在《Windows核心编程》中有详细介绍,我在此就不重复了。在此,我只说明其中要注意的地方。
最好结束线程的方法就是通过线程函数返回,这样可以释放掉所有的资源,包括系统资源以及C++资源。可以通过函数返回值来设置线程退出码(Exit Code)。
可以在线程函数中调用ExitThread函数来结束自己,其参数为线程退出码(Exit Code)。通过ExitThread函数结束线程时,可以释放系统资源,但是不能释放C++资源,如:若在线程函数中定义了一个类的对象,若通过ExitThread函数结束线程,则不会调用该对象的析构函数,需要在其析构函数中释放的资源将不能被释放。
通过TerminateThread函数,可以强制结束一个线程,其中第一个参数是线程句柄,第二个参数是线程退出码(Exit Code)。通过ExitThread函数结束线程,线程的栈将被销毁,而通过TerminateThread函数结束线程,线程的栈将不被销毁,因为线程是被强制结束的,系统认为可能有其他线程还会使用到该线程的资源。
最好结束线程的方法就是通过线程函数返回,这样可以释放掉所有的资源,包括系统资源以及C++资源。可以通过函数返回值来设置线程退出码(Exit Code)。
可以在线程函数中调用ExitThread函数来结束自己,其参数为线程退出码(Exit Code)。通过ExitThread函数结束线程时,可以释放系统资源,但是不能释放C++资源,如:若在线程函数中定义了一个类的对象,若通过ExitThread函数结束线程,则不会调用该对象的析构函数,需要在其析构函数中释放的资源将不能被释放。
通过TerminateThread函数,可以强制结束一个线程,其中第一个参数是线程句柄,第二个参数是线程退出码(Exit Code)。通过ExitThread函数结束线程,线程的栈将被销毁,而通过TerminateThread函数结束线程,线程的栈将不被销毁,因为线程是被强制结束的,系统认为可能有其他线程还会使用到该线程的资源。
#10
步骤:
1。建立一个bool变量,如果该变量为true时需要结束工作者线程
2。修改工作者线程中的算法,每隔一小段时间,就要检测该bool变量,如果检测到位真值,则退出线程,其他的招数都非法
可以采用强制终止线程的函数,但强烈不建议采用,因为这个破坏了程序运行的结构,可能带来一大堆的问题,特别是内存释放
1。建立一个bool变量,如果该变量为true时需要结束工作者线程
2。修改工作者线程中的算法,每隔一小段时间,就要检测该bool变量,如果检测到位真值,则退出线程,其他的招数都非法
可以采用强制终止线程的函数,但强烈不建议采用,因为这个破坏了程序运行的结构,可能带来一大堆的问题,特别是内存释放
#11
#12
设个全局的事件或者通过参数传递一个事件
线程每工作一小段,就检查一下事件
主线程 SetEvent 然后子线程就立即退出。
线程每工作一小段,就检查一下事件
主线程 SetEvent 然后子线程就立即退出。
#13
强制结束吧 ternimatethread
#14
AfxEndThread是在线程函数内部结束线程自身用的
TernimateThread是在线程外部,供别的函数结束一个线程的。
TernimateThread是在线程外部,供别的函数结束一个线程的。
#15
为何一定要强制退出呢,多线程并不会影响你的其他操作啊
如果确实是卡在处理过程 还真没有什么好方法,强制的话 不推荐 会产生问题
如果确实是卡在处理过程 还真没有什么好方法,强制的话 不推荐 会产生问题
#16
while(bFlag)
{
}
bFlag = false;
{
}
bFlag = false;
#17
在线程里,把任务细分,每完成一小步,同步一下,如果主程序要求结束任务;
立即扫尾,然后结束任务,不然继续下一步。
立即扫尾,然后结束任务,不然继续下一步。
#18
这个方法比较稳妥
#1
AfxEndThread(一)void AFXAPI AfxEndThread(UINT nExitCode,
BOOL bDelete = TRUE);//函数原型声明1
(二)void AfxEndThread(UINT nExitCode);//函数原型声明2
此方法用于终止当前正在执行的线程,必须在当前线程内部调用才能生效。
返回值:void
参数:
nExitCode: 32位的线程的退出码,该退出码由GetExitCodeThread方法获得。
bDetete: 是否从内存中删除线程对象,默认值为TRUE。
必要条件:
Windows CE 2.0以上版本。头文件声明在Afxwin.h中。
基于平台: 个人计算机,掌上电脑,小型机。
相关词条:AfxBeginThread TerminateThread GetExitCodeThread
参考:MSDN
BOOL bDelete = TRUE);//函数原型声明1
(二)void AfxEndThread(UINT nExitCode);//函数原型声明2
此方法用于终止当前正在执行的线程,必须在当前线程内部调用才能生效。
返回值:void
参数:
nExitCode: 32位的线程的退出码,该退出码由GetExitCodeThread方法获得。
bDetete: 是否从内存中删除线程对象,默认值为TRUE。
必要条件:
Windows CE 2.0以上版本。头文件声明在Afxwin.h中。
基于平台: 个人计算机,掌上电脑,小型机。
相关词条:AfxBeginThread TerminateThread GetExitCodeThread
参考:MSDN
#2
在一系列工作之间加入线程是否结束的判断,缩短两次线程结束条件判断之间的间隔时间。
#3
我也考虑这个办法了,无奈步骤太多了,能不能有更简洁了当的办法呢?
#4
这算强制退出线程吗?
#5
3种方法,一种就是上面说的,一种就是强制退出,还有就是你在关闭的时候用另一种机制来等待。
#6
最好等它完成再结束,要不只能强制结束,不过,可能有内存泄露,这在《windows核心编程》第五版上有详细说明
#7
强杀线程 我从来没这么搞过.
就是线程循环搞个flag termnate而已就行了.
就是线程循环搞个flag termnate而已就行了.
#8
AfxEndThread(一)void AFXAPI AfxEndThread(UINT nExitCode,
BOOL bDelete = TRUE);//函数原型声明1
(二)void AfxEndThread(UINT nExitCode);//函数原型声明2
此方法用于终止当前正在执行的线程,必须在当前线程内部调用才能生效。
返回值:void
参数:
nExitCode: 32位的线程的退出码,该退出码由GetExitCodeThread方法获得。
bDetete: 是否从内存中删除线程对象,默认值为TRUE。
必要条件:
Windows CE 2.0以上版本。头文件声明在Afxwin.h中。
基于平台: 个人计算机,掌上电脑,小型机。
相关词条:AfxBeginThread TerminateThread GetExitCodeThread
参考:MSDN
BOOL bDelete = TRUE);//函数原型声明1
(二)void AfxEndThread(UINT nExitCode);//函数原型声明2
此方法用于终止当前正在执行的线程,必须在当前线程内部调用才能生效。
返回值:void
参数:
nExitCode: 32位的线程的退出码,该退出码由GetExitCodeThread方法获得。
bDetete: 是否从内存中删除线程对象,默认值为TRUE。
必要条件:
Windows CE 2.0以上版本。头文件声明在Afxwin.h中。
基于平台: 个人计算机,掌上电脑,小型机。
相关词条:AfxBeginThread TerminateThread GetExitCodeThread
参考:MSDN
#9
结束线程共有四中方法,线程函数返回、ExitThread函数、TerminateThread函数、在进程终止运行时撤消线程。方法间的差别在《Windows核心编程》中有详细介绍,我在此就不重复了。在此,我只说明其中要注意的地方。
最好结束线程的方法就是通过线程函数返回,这样可以释放掉所有的资源,包括系统资源以及C++资源。可以通过函数返回值来设置线程退出码(Exit Code)。
可以在线程函数中调用ExitThread函数来结束自己,其参数为线程退出码(Exit Code)。通过ExitThread函数结束线程时,可以释放系统资源,但是不能释放C++资源,如:若在线程函数中定义了一个类的对象,若通过ExitThread函数结束线程,则不会调用该对象的析构函数,需要在其析构函数中释放的资源将不能被释放。
通过TerminateThread函数,可以强制结束一个线程,其中第一个参数是线程句柄,第二个参数是线程退出码(Exit Code)。通过ExitThread函数结束线程,线程的栈将被销毁,而通过TerminateThread函数结束线程,线程的栈将不被销毁,因为线程是被强制结束的,系统认为可能有其他线程还会使用到该线程的资源。
最好结束线程的方法就是通过线程函数返回,这样可以释放掉所有的资源,包括系统资源以及C++资源。可以通过函数返回值来设置线程退出码(Exit Code)。
可以在线程函数中调用ExitThread函数来结束自己,其参数为线程退出码(Exit Code)。通过ExitThread函数结束线程时,可以释放系统资源,但是不能释放C++资源,如:若在线程函数中定义了一个类的对象,若通过ExitThread函数结束线程,则不会调用该对象的析构函数,需要在其析构函数中释放的资源将不能被释放。
通过TerminateThread函数,可以强制结束一个线程,其中第一个参数是线程句柄,第二个参数是线程退出码(Exit Code)。通过ExitThread函数结束线程,线程的栈将被销毁,而通过TerminateThread函数结束线程,线程的栈将不被销毁,因为线程是被强制结束的,系统认为可能有其他线程还会使用到该线程的资源。
#10
步骤:
1。建立一个bool变量,如果该变量为true时需要结束工作者线程
2。修改工作者线程中的算法,每隔一小段时间,就要检测该bool变量,如果检测到位真值,则退出线程,其他的招数都非法
可以采用强制终止线程的函数,但强烈不建议采用,因为这个破坏了程序运行的结构,可能带来一大堆的问题,特别是内存释放
1。建立一个bool变量,如果该变量为true时需要结束工作者线程
2。修改工作者线程中的算法,每隔一小段时间,就要检测该bool变量,如果检测到位真值,则退出线程,其他的招数都非法
可以采用强制终止线程的函数,但强烈不建议采用,因为这个破坏了程序运行的结构,可能带来一大堆的问题,特别是内存释放
#11
#12
设个全局的事件或者通过参数传递一个事件
线程每工作一小段,就检查一下事件
主线程 SetEvent 然后子线程就立即退出。
线程每工作一小段,就检查一下事件
主线程 SetEvent 然后子线程就立即退出。
#13
强制结束吧 ternimatethread
#14
AfxEndThread是在线程函数内部结束线程自身用的
TernimateThread是在线程外部,供别的函数结束一个线程的。
TernimateThread是在线程外部,供别的函数结束一个线程的。
#15
为何一定要强制退出呢,多线程并不会影响你的其他操作啊
如果确实是卡在处理过程 还真没有什么好方法,强制的话 不推荐 会产生问题
如果确实是卡在处理过程 还真没有什么好方法,强制的话 不推荐 会产生问题
#16
while(bFlag)
{
}
bFlag = false;
{
}
bFlag = false;
#17
在线程里,把任务细分,每完成一小步,同步一下,如果主程序要求结束任务;
立即扫尾,然后结束任务,不然继续下一步。
立即扫尾,然后结束任务,不然继续下一步。
#18
这个方法比较稳妥