我创建了一个ActiveX,在OnCreate事件中创建了两个线程。在OnDestroy事件中释放这两个线程。问题现象是有时候在调用一次ActiveX后再调用时,程序不执行OnCreate事件。我跟进去发现不成功调用的可能原因时第一次调用后OnDestroy执行时报一个错误(这个错误需要跟进去才能看到)The thread 0xBE0 has exited with code 1。查了查有人提到是内存泄漏造成的。请教各位高人帮我看看。相关代码如下:
int CPrinterCtrlCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
{
return -1;
}
DWORD dwFailed = 0;
this->EditRegistry(&dwFailed); // 清空注册表里句柄值
DeleteAllFile(); // 删除所有已有图片的文件
pPrintThread = (CWinThread *)AfxBeginThread(_PrintThread,this,
THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL); //Create print thread
pPrinterSendThread = (CWinThread *)AfxBeginThread(_PrinterSendThread,this,
THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL); //Create socket thread
return 0;
}void CPrinterCtrlCtrl::OnDestroy() 
{
COleControl::OnDestroy();

//ClearBeeSocket(&pPrinterSocket); // Clear the socket
_KillPrintThread(); // kill the thread
_KillPrinterSendThread(); // Kill the thread
}void _KillPrintThread()
{
DWORD dwStatus;
  if(pPrintThread!=NULL)
{
//::WaitForSingleObject(pPrintThread->m_hThread,INFINITE); 
::GetExitCodeThread(pPrintThread->m_hThread, &dwStatus);
if (dwStatus == STILL_ACTIVE)
{
// AfxEndThread(dwStatus, true);
delete pPrintThread;
}
pPrintThread = NULL;
}
}

解决方案 »

  1.   

    我有试过创建线程后不调用,直接释放。也会在释放的时候出现这个错误。怀疑是由于线程占用的资源没有完全释放就关闭了应用程序。尝试了WaitForSingleObject(pPrintThread->m_hThread,INFINITE);和AfxEndThread(dwStatus, true);方法。但一个出现死循环,一个报错。不知道怎么办了。感谢大家帮我看看
      

  2.   

    代码好不能单独运行,还有socket服务·器,虚拟打印机等等比较麻烦。不过这个问题应该和它们没有关系。我就是单独创建一个ActiveX,而后结束就有问题,表现为再调用ActiveX时onCreate事件不执行。我想,这应该是导致问题出现的关键,不知道大家有没有遇到过类似问题
      

  3.   

    CREATE_SUSPENDED
    你本来就是以挂起的方式创建的线程,
    pPrintThread->ResumeThread();
    ...
      

  4.   

    是的,我是用挂起的方式启动的.当需要的时候才会ResumeThread.但现在遇到的问题是还没有ResumeThread线程直接关闭应用程序就出错.奇怪~~~~