C++多线程select除错
本人小菜,遇到了这样一个错误!描述如下:
我使用了MFC的框架,在CDocument下写了所有的数据,其中有一个方法作为服务器的监听方法,其中用到了死循环select,select设置超时为30秒。在CwinApp的继承类里面定义一个全局函数,作为线程函数,并把CwinApp的指针传递给他,从而获得CDocument的对象,然后调用服务器的监听方法,死循环等待客户端发送数据,程序运行良好,但是在程序退出的时候,不知道该怎么结束这个线程!现在的做法是给select的死循环设置一个变量flag,程序退出时设置flag为假(在CView的析构函数中设置),但是因为select是要阻塞等待30秒的,所以这个线程不会马上结束!可能因此而发生错误。程序每次关闭的时候都会崩溃,用Numega看就是如下加斜线的位置有错误,
AFXTLS.CPP
// special version of CThreadSlotData::GetData that only works with
// thread local storage (and not process local storage)
// this version is inlined and simplified for speed
inline void* CThreadSlotData::GetThreadValue(int nSlot)
{
ASSERT(nSlot != 0 && nSlot < m_nMax);
ASSERT(m_pSlotData != NULL);
ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
ASSERT(m_tlsIndex != (DWORD)-1);
quickwatch看的话就是:
m_nMax expression cannot be evaluted