void CioDlg::CheckStart(LPVOID lpam)
{
USES_CONVERSION;
   
if(!OpenPort)
m_com.Open(ComNumber);
CString cmdstart=_T("%EE#RCSR0020");
CString check=m_com.Fcm(cmdstart);
cmdstart=cmdstart+_T(check)+_T("\r");//此句引起泄漏 CString cmdread=_T("%EE#RDD0021200212");
check=m_com.Fcm(cmdread);
cmdread=cmdread+check+_T("\r"); CString cmdclear=_T("%EE#WCSR00200");
check=m_com.Fcm(cmdclear);
cmdclear=cmdclear+check+_T("\r"); CString readrsv;
while (TRUE)
{
if (!flagTesting)
{
g_event=CreateEvent(NULL,TRUE,FALSE,NULL);
if (g_event==NULL)
{
AfxMessageBox(_T("createevent failed")); }
Sleep(200);
SetEvent(g_event);
break;
}
m_com.OnSend(cmdstart);
Sleep(5);
readrsv=m_com.Read();
if (readrsv !=_T(""))
{
int index=readrsv.Find(_T("RC"));
if (index>=0)
{
readrsv=readrsv.Mid(index+2,1);
}
else
{
continue;
}
if ("1" ==readrsv )
{
m_com.OnSend(cmdclear);
Sleep(5);
readrsv=m_com.Read();
if (readrsv.Find(_T("EE$WC"))>=0)
{
if (writePDCA)

ReadSN(); if (sn ==_T(""))
{
AfxMessageBox(_T("Please scan SN!"));
continue;
}
}
CString startcs=_T("%EE#WCSR00211");
check=m_com.Fcm(startcs);
startcs=startcs+check+_T("\r"); m_com.OnSend(startcs);
Sleep(5);
readrsv=m_com.Read();
if (readrsv.Find(_T("%EE$WC"))>=0)
{

    hThread2=CreateThread(NULL,0,ThreadFun2,this,0,NULL);//开另一个线程

break;
} }
}
多线程cstring内存泄漏

解决方案 »

  1.   

    在DEBUG下调试显示内存泄漏。用_CrtSetBreakAlloc(num);找到是这个。上面这个函数是在线程里调用的  
    线程退出也用了信号安全退出了
      

  2.   

    CString cmdstart=_T("%EE#RCSR0020");
    CString check=m_com.Fcm(cmdstart);
    cmdstart=cmdstart+_T(check)+_T("\r");//此句引起泄漏
    我把这后两给屏蔽,就给第一条他还是不行,这有问题吧?
      

  3.   

    程序里很多用了cstring 改起来麻烦。改为了类的全局没问题了,谢谢各位!
      

  4.   

    “io.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC90.MFCLOC_1fc8b3b9a1e18e3b_9.0.30729.6161_x-ww_730c3508\mfc90chs.dll”,未使用调试信息生成二进制文件。
    Detected memory leaks!
    Dumping objects ->
    {68} client block at 0x00399140, subtype c0, 64 bytes long.
    a CDynLinkLibrary object at $00399140, 64 bytes long
    Object dump complete.
    “io.exe”: 已加载“C:\WINDOWS\system32\uxtheme.dll”
    改完后还有内存泄漏,用上面定位函数找不到奇怪呢?