• <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++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              47 Posts :: 0 Stories :: 97 Comments :: 0 Trackbacks

            類似的問(wèn)題見(jiàn)http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_20084406.html

            下面的代碼,當(dāng)用AfxBeginThread開(kāi)始一個(gè)線程時(shí),實(shí)際上是有內(nèi)存泄漏的

            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.
            實(shí)際上,只要看到是thrdcore.cpp(166) 的內(nèi)存泄漏,基本就是同一個(gè)原因,和上面的代碼一樣。
            解決方法:
            step 1)
            在線程函數(shù)中,記得寫AfxEndThread();(與AfxBeginThread對(duì)應(yīng),其他的開(kāi)始線程的函數(shù),有相應(yīng)的函數(shù))
            step 2)
            用::WaitForSingleObject()確保線程徹底退出

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

            Feedback

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

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

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

            個(gè)人覺(jué)得應(yīng)該先用CREATE_SUSPENDED啟動(dòng)線程, 再設(shè)置bAutoDelete , 最后再ResumeThread. 否則, 有極端的情況下, AfxBeginThread啟動(dòng)的線程已經(jīng)退出. WaitForSingleObject將不能正確取處m_hThread句柄.

            qq:16182038  回復(fù)  更多評(píng)論
              

            # re: Memory leak in CWinThread?[未登錄](méi) 2007-09-07 15:31 flyingxu
            @FLHang
            你說(shuō)的有道理  回復(fù)  更多評(píng)論
              

            久久精品国产欧美日韩| 伊人久久大香线蕉成人| 99蜜桃臀久久久欧美精品网站| 久久久久成人精品无码中文字幕| 无码任你躁久久久久久老妇App| 精品国产青草久久久久福利 | 人妻精品久久无码专区精东影业| 久久亚洲熟女cc98cm| 中文字幕久久久久人妻| 91久久香蕉国产熟女线看| 性做久久久久久久久老女人| 久久天天躁狠狠躁夜夜avapp| 国产99久久精品一区二区| 久久久精品人妻无码专区不卡| 亚洲国产成人久久一区久久| 亚洲中文久久精品无码| 久久99精品国产麻豆婷婷| 伊人久久大香线蕉av不卡| 99久久国产亚洲高清观看2024| 久久精品日日躁夜夜躁欧美| 久久国产精品99精品国产987| 久久性生大片免费观看性| 99久久人妻无码精品系列| 久久精品国产精品亜洲毛片| 国产精品无码久久久久久| 人妻无码中文久久久久专区| 欧美亚洲国产精品久久久久| 国产精品永久久久久久久久久| 国产精品一区二区久久| 亚洲AV无码久久精品狠狠爱浪潮| 色婷婷噜噜久久国产精品12p| 97r久久精品国产99国产精| 亚洲国产日韩欧美综合久久| 美女写真久久影院| 久久久久夜夜夜精品国产| 99久久超碰中文字幕伊人| 久久亚洲精品成人av无码网站| 久久久久亚洲AV无码专区首JN | 久久久久女人精品毛片| 久久久无码精品亚洲日韩京东传媒 | 18禁黄久久久AAA片|