• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            love in C++, live on MFC

            to get ready...

            C++博客 首頁 新隨筆 聯系 聚合 管理
              47 Posts :: 0 Stories :: 97 Comments :: 0 Trackbacks

            類似的問題見http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_20084406.html

            下面的代碼,當用AfxBeginThread開始一個線程時,實際上是有內存泄漏的

            for ?(ii? = ? 0 ;?ii? < ? 1000 ;?ii ++ )?
            {
            ??CWinThread?
            *
            pWinThread;?
            ??pWinThread?
            =
            ?AfxBeginThread(ThreadLBProc,?NULL);
            ??::Sleep(
            500
            );
            }

            UINT?ThreadLBProc(LPVOID?pParam)
            {
            ??
            return ? 0
            ;
            }

            VC輸出的典型提示為:
            Detected memory leaks!
            Dumping objects ->
            thrdcore.cpp(166) : {782} client block at 0x00425300, subtype 0, 112 bytes long.
            實際上,只要看到是thrdcore.cpp(166) 的內存泄漏,基本就是同一個原因,和上面的代碼一樣。
            解決方法:
            step 1)
            在線程函數中,記得寫AfxEndThread();(與AfxBeginThread對應,其他的開始線程的函數,有相應的函數)
            step 2)
            用::WaitForSingleObject()確保線程徹底退出

            step 2是比較容易忽略的,用sleep函數只能僥幸的保證線程退出,但不能確保。
            posted on 2006-07-26 19:11 flyingxu 閱讀(3454) 評論(3)  編輯 收藏 引用 所屬分類: VC/MFCBug of Today

            Feedback

            # re: Memory leak in CWinThread? 2006-08-10 23:18 flyingxu
            今天又試了一下,發現恰當的應該是:
            AfxBeginThread -> CreateThread ->_beginthreadex -> _AfxThreadEntry
            而在_AfxThreadEntry中,會保證AfxEndThread會調用,這個時候,如果
            pWinThread->m_bAutoDelete == TRUE, 整個pWinThread會delete掉,pWinThread->m_hThread也就自然不是個有意義的值。
            所以:
            //code 1:
            //remember pWinThread for later use
            m_pWinThread = AfxBeginThread(ThreadLBProc, NULL);
            //不要自動刪掉m_WinThread,保證pWinThread->m_hThread可用
            m_WinThread->m_bAutoDelete = FALSE;

            //code 2
            WaitForSingleObject(pWinThread->m_hThread, INFINITE)
            delete pWinThread;//在使用完pWinThread->m_hThread后,再手工delete  回復  更多評論
              

            # re: Memory leak in CWinThread? 2007-09-07 12:42 FLHang
            感謝作者的文章, 不過我對有一個地方有點疑惑, 是否需要進行如下改進???
            m_pMonitorThread = AfxBeginThread(MonitorThread, (LPVOID)this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
            m_pMonitorThread->m_bAutoDelete = FALSE;
            m_pMonitorThread->ResumeThread();

            個人覺得應該先用CREATE_SUSPENDED啟動線程, 再設置bAutoDelete , 最后再ResumeThread. 否則, 有極端的情況下, AfxBeginThread啟動的線程已經退出. WaitForSingleObject將不能正確取處m_hThread句柄.

            qq:16182038  回復  更多評論
              

            # re: Memory leak in CWinThread?[未登錄] 2007-09-07 15:31 flyingxu
            @FLHang
            你說的有道理  回復  更多評論
              

            国产精品乱码久久久久久软件| 伊人久久大香线焦AV综合影院| 久久久久久无码Av成人影院 | 99久久免费国产特黄| 欧美喷潮久久久XXXXx| 狠狠狠色丁香婷婷综合久久五月 | 久久久久久久精品妇女99| 久久精品国产亚洲AV不卡| …久久精品99久久香蕉国产| 欧美精品一区二区精品久久 | 免费精品久久天干天干| 性欧美大战久久久久久久久| 久久精品无码一区二区三区| 综合久久一区二区三区 | 久久精品国产亚洲AV蜜臀色欲| 国产精品天天影视久久综合网| 久久免费国产精品| 国产精品福利一区二区久久| 久久只这里是精品66| 天天久久狠狠色综合| 中文字幕无码精品亚洲资源网久久| 91亚洲国产成人久久精品| 天堂久久天堂AV色综合| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久久久亚洲爆乳少妇无| 久久天天躁狠狠躁夜夜网站| 伊人久久亚洲综合影院| 女人香蕉久久**毛片精品| 72种姿势欧美久久久久大黄蕉 | 久久婷婷五月综合国产尤物app| 中文精品99久久国产| 日本精品一区二区久久久| 久久99久久无码毛片一区二区| 国内精品久久久久影院日本| 精品久久久无码21p发布| 欧美麻豆久久久久久中文| 久久99久久无码毛片一区二区| 亚洲国产精品热久久| 国产精品狼人久久久久影院 | 欧美精品福利视频一区二区三区久久久精品| 99精品久久精品一区二区|