怎么保证检测进程先于对象析构
如何保证检测进程先于对象析构
如上,这个一个状态检测进程,SenderBase 把对象指针传给他。
所以要是在进程睡眠的5秒内,函数析构了,while(p->start)时,p就是非法指针了。
后来我做了如下修改
但竟然还会偶尔出现SenderBase对象先被析构。
而且就算不会先析构。也要等5S的睡眠时间到后才能退出
不知道还有没有更好的做法。望指点。在线等
------解决方案--------------------
还可以使用dynamic_cast<SenderBase *>进行转化-->SenderBase *p = (SenderBase *)param;
如果失败,则p指针已被析构
void CheckThreadProc(void *param)
{
SenderBase *p = (SenderBase *)param;
while(p->start)
{
//do something;
Sleep(5000);
}
}
如上,这个一个状态检测进程,SenderBase 把对象指针传给他。
所以要是在进程睡眠的5秒内,函数析构了,while(p->start)时,p就是非法指针了。
后来我做了如下修改
void CheckThreadProc(void *param)
{
SenderBase *p = (SenderBase *)param;
p->bCheckPrecoss = TRUE;//20130305 ADD
while(p->start)
{
//do something;
Sleep(5000);
}
p->bCheckPrecoss = FALSE;//20130305 ADD
}
SenderBase::~SenderBase(void)
{
while(bCheckPrecoss);//20130305 ADD BY CQ
}
但竟然还会偶尔出现SenderBase对象先被析构。
而且就算不会先析构。也要等5S的睡眠时间到后才能退出
不知道还有没有更好的做法。望指点。在线等
c
进程
析构
------解决方案--------------------
还可以使用dynamic_cast<SenderBase *>进行转化-->SenderBase *p = (SenderBase *)param;
如果失败,则p指针已被析构