怎样通过外部操作终止我程序中运行的线程呢 假设某时服务端程序中有一定数量线程在运行,但这时候服务端因某些原因希望停止服务,怎么样才能把这些线程终止才比较好呢?是通过ExitThread()吗?我觉得这样做没有清除线程中的内存等工作,有别的方法吗?(我的线程是工作者线程,没有消息循环) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 服务端程序中首先就有一个消息处理函数,用于处理你自定义的终止线程命令,至于终止线程,有两个函数ExitThread,TerminateThread.前者一般是线程正常结束时,系统自动调用的,本来它就会进行善后清理工作。而后者是强行终止,善后清理得自己来。如果是进程,也有ExitProcess(UINT fuExitCode) 和TerminateProcess(HANDLE hProcess,UINT fuExitCode)函数,可以从参数看出,只要有线程或进程的handle,我们就可以结束它,不推荐使用TerminateProcess和TerminateThread,因为如它不会通知已经开启的DLLs.你可以用CloseHandle来关闭线程:PROCESS_INFORMATION ProcInfo;BOOL fSuccess;fSuccess = CreateProcess(...,&ProcInfo);if (fSuccess){ CloseHandle(ProcInfo.hThread); CloseHandle(ProcInfo.hProcess);//你要关闭的线程。} 设置一参数,在主线程中BOOL bMFlag = TURE;在终止辅线程的时候在主线程中让bMFlag = FLASE来终止辅线程,控制他们(参数)就可以了 也就是说当这参数为0的话return就好了 work线程的生命就是函数本身,函数结束了,现成就终止了。你的没法终止应该是线程中有什么循环语句吧?可以设全局变量,也可以设置event(个人觉得比全局变量安全),当外部线程触发条件时就改变全局变量/event,再在你的循环语句里加上判别语句,条件满足时就return.不放心就加个afxendthread()(mfc),实质还是内部调用_endthreadex.作为一个CWinThrea对象,最后应该释放对象(delete) 有用过Bodsoft DirectUI界面库的吗? GetWindowThreadProcessId 出错 关于窗口最大化的问题 LOGFONT 怎样实现序列化??谢谢大家 试图执行系统不支持的操作 打包出错 如何实现这样的按钮和工具条?在线.......很实用的!!! Control没有窗口句柄?散1000分! 高分!!!用OpenGL实时控制三维动画!!??? 有一个BCB编制的DLL文件,在VC里有那个工具能把这个DLL文件导成lib文件来静态调用? 在学VC++,但不知如何才能找到一本好书??请帮帮我. 向高手求教 绘图问题 紧急求救(100分)
如果是进程,也有ExitProcess(UINT fuExitCode) 和TerminateProcess(HANDLE hProcess,
UINT fuExitCode)函数,
可以从参数看出,只要有线程或进程的handle,我们就可以结束它,不推荐使用TerminateProcess和TerminateThread,因为如它不会通知已经开启的DLLs.你可以用CloseHandle来关闭线程:
PROCESS_INFORMATION ProcInfo;
BOOL fSuccess;
fSuccess = CreateProcess(...,&ProcInfo);
if (fSuccess){
CloseHandle(ProcInfo.hThread);
CloseHandle(ProcInfo.hProcess);//你要关闭的线程。
}
afxendthread()(mfc),实质还是内部调用_endthreadex.
作为一个CWinThrea对象,最后应该释放对象(delete)