为啥线程指定的Routine返回之后 WaitForSingleObject无法返回
为什么线程指定的Routine返回之后 WaitForSingleObject无法返回?封装了一个线程类然后定义为全局的static
为什么线程指定的Routine返回之后 WaitForSingleObject无法返回?
封装了一个线程类
然后定义为全局的static对象
我把中止线程的操作放在对象的析构函数里
这样在主线程退出之后 会调用到析构函数进而终止线程执行
class CIHaveThread
{
public:
CIHaveThread()
{
CreateThread();
}
~CIHaveThread()
{
TerminalThread()
{
SingleExit();
::WaitForSingleObject(ThreadHandle, 0xFFFFFFFF);
}
}
}
但是问题出来了
虽然析构函数通知了线程退出 并且Debug里也跟到了线程执行到了return
但是主线程却一直卡在::WaitForSingleObject
打开调试信息可以看到对应线程id的线程还在
如果把创建线程的函数从CreateThread 替换为beginthreadex
打开调试信息则看不到对应线程id的线程 但是::WaitForSingleObject依然处于阻塞状态 无法返回
是否是我使用的方法不当
static对象是在主线程return之后才释放
也就变成了我开启的线程在主线程return之后才尝试退出
规范的用法是不是应该在主线程return之前尝试退出所有的子线程?
做了多种尝试 但是还是没法解决问题。
希望有人人帮忙解答。
[解决办法]beginthreadex 最好用这个,你断点看看,是不是其他的线程一直占用着资源,或者你查看看你的线程中有没有写死循环之类的。
[解决办法]WaitForSingleObject 的第二个参数,表示调用线程等待的阻塞时间。
但是你传0xFFFFFFFF的话,相当于宏INFINITE,这个值其实没必要用这个的,
当你的ThreadHandle状态没有通知到WaitForSingleObject接口的话,
可能就是死锁状态了!