• <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>

            戰魂小筑

            討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

            我在工程里使用以下函數給線程設置一個方便調試的名稱

                typedef struct tagTHREADNAME_INFO
                {
                    DWORD dwType;        // must be 0x1000
                    LPCSTR szName;        // pointer to name (in user addr space)
                    DWORD dwThreadID;    // thread ID (-1=caller thread)
                    DWORD dwFlags;        // reserved for future use, must be zero
                } THREADNAME_INFO;
             
                void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName )
                {
                    THREADNAME_INFO info;
                    info.dwType = 0x1000;
                    info.szName = szThreadName;
                    info.dwThreadID = dwThreadID;
                    info.dwFlags = 0;
             
                      // Visit http://m.shnenglu.com/sunicdavy for original article
                    __try
                    {
                        RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info );
                    }
                    __except(EXCEPTION_CONTINUE_EXECUTION)
                    {
                        int a =1;
                    }
                }

            使用期間一直正常. 隨著工程需求變化,我需要頻繁的將一個被命名的線程創建工作一段時間后馬上結束釋放資源并重新創建,出現了死鎖問題

            死鎖總是發生在主線程的Sleep或者是SetEvent兩個WindowsAPI函數. 而且僅僅在Visual Studio 2008里調試時會發生死鎖,脫離調試環境一切正常.

            我開始打日志調試, 結果發現死鎖前能夠正常創建線程,但是線程函數根本沒有調用進入.之后就在主線程Sleep處死鎖了.

            由于SetThreadName沒有使用正規的API接口,而是使用拋異常方式, 而且線程名稱應該只在Visual Studio IDE中才能顯示, MSDN對RaiseException的描述里也有說明可以使用WaitForDebugEvent接收應用程序拋得異常.因此可以推斷是SetThreadName造成的問題. 屏蔽SetThreadName,測試通過

            posted on 2011-10-12 09:50 戰魂小筑 閱讀(3037) 評論(1)  編輯 收藏 引用 所屬分類: 程序調試技術C++/ 編程語言操作系統

            評論

            # re: VC中使用SetThreadName引起的線程死鎖 2011-10-18 23:21 陳梓瀚(vczh)
            這個名稱只被VC++的debugger看到,而且在set之后才attach process是沒用的,我覺得你可以不干這件事情。  回復  更多評論
              

            久久九九亚洲精品| 亚洲а∨天堂久久精品9966| 久久99精品国产一区二区三区| Xx性欧美肥妇精品久久久久久| 久久伊人中文无码| AV色综合久久天堂AV色综合在 | 久久人人爽人人爽人人av东京热| 亚洲va久久久噜噜噜久久天堂 | 国产激情久久久久久熟女老人| 久久亚洲高清观看| 99久久er这里只有精品18| 亚洲国产成人精品无码久久久久久综合| 精品国产乱码久久久久久1区2区 | 亚洲人AV永久一区二区三区久久 | 国产欧美久久久精品| 麻豆AV一区二区三区久久| 一级A毛片免费观看久久精品| 久久免费视频网站| 久久成人精品视频| 久久91精品国产91久久小草| 亚洲AV无码久久精品色欲| 一本久久免费视频| 天天做夜夜做久久做狠狠| 久久精品亚洲乱码伦伦中文| 国产精品久久久99| 精品久久人人做人人爽综合 | 久久精品国产亚洲av麻豆色欲 | 9191精品国产免费久久| 国产精品一久久香蕉国产线看| 久久精品人人做人人妻人人玩 | 777久久精品一区二区三区无码| 久久精品中文騷妇女内射| 97久久国产亚洲精品超碰热| 国产亚洲欧美精品久久久| 国产精品久久一区二区三区 | 久久青青草原精品国产不卡| 久久男人AV资源网站| 久久久久亚洲AV无码专区首JN| 久久无码AV中文出轨人妻| 色婷婷综合久久久久中文一区二区| 久久国产色AV免费观看|