封装了一个线程类
然后定义为全局的static对象
我把中止线程的操作放在对象的析构函数里
这样在主线程退出之后 会调用到析构函数进而终止线程执行
class CIHaveThread
{
public:
CIHaveThread()
{
CreateThread();
}
~CIHaveThread()
{
TerminalThread()
{
SingleExit();
::WaitForSingleObject(ThreadHandle, 0xFFFFFFFF);
}
}
}
但是问题出来了
虽然析构函数通知了线程退出 并且Debug里也跟到了线程执行到了return
但是主线程却一直卡在::WaitForSingleObject
打开调试信息可以看到对应线程id的线程还在
如果把创建线程的函数从CreateThread 替换为beginthreadex
打开调试信息则看不到对应线程id的线程 但是::WaitForSingleObject依然处于阻塞状态 无法返回
是否是我使用的方法不当
static对象是在主线程return之后才释放
也就变成了我开启的线程在主线程return之后才尝试退出
规范的用法是不是应该在主线程return之前尝试退出所有的子线程?
做了多种尝试 但是还是没法解决问题。
希望有人人帮忙解答。