怎么保证检测进程先于对象析构

如何保证检测进程先于对象析构
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指针已被析构