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

            在工作線程中更新UI保險(xiǎn)方法

            一直以來,對(duì)在工作線程中更新UI這個(gè)問題沒有一個(gè)全面的認(rèn)識(shí),看到下面的文章,總算解決了心中長(zhǎng)久以來的疑惑;豁然開朗。

            個(gè)人比較喜歡第一種方法。

             

            http://www.itepub.net/html/kaifajingcui/C___VC/2006/0515/38137.html

             

                最近寫了個(gè)代碼,在UI線程中創(chuàng)建了一個(gè)窗口,然后在工作線程中修改了這個(gè)窗口中的一些數(shù)據(jù),然后想用UpdateData(FALSE)來更新窗口的內(nèi)容,結(jié)果在Debug版本下面就出現(xiàn)了Assert報(bào)錯(cuò),說出錯(cuò)地方是wincore.cpp的888行和889行,就是這兩句
              ASSERT((p = pMap->LookupPermanent(m_hWnd)) != NULL ||
               (p = pMap->LookupTemporary(m_hWnd)) != NULL);
              ASSERT((CWnd*)p == this);   // must be us
                我用MFC也沒有多久,也不太熟悉,翻了翻資料,在http://support.microsoft.com/default.aspx?scid=kb;en-us;147578找到一篇文章,就是說MFC窗口跨線程的問題的,大概意思就是MFC的窗口是線程相關(guān)的,每個(gè)窗口的HandleMap是儲(chǔ)存在線程相關(guān)的堆棧里面的 (thread-local-storage (TLS) ),那這樣我就理解了為什么上面兩句ASSERT會(huì)出錯(cuò)了,線程環(huán)境都切換了當(dāng)然線程堆棧的數(shù)據(jù)也就不一樣了.
                這篇文章提供了兩種修改方案:
               一種是用FromHandle來獲得一個(gè)CWnd*,然后再調(diào)用UpdateData,這個(gè)方案我沒有實(shí)驗(yàn)成功,結(jié)果是錯(cuò)雖然不報(bào)了,但是界面也沒有被更新.
                另外一種是通過發(fā)消息的方法轉(zhuǎn)到UI線程去處理.可以在窗口映射一個(gè)消息,比如ON_MESSAGE(WM_UPDATEDATA, OnUpdateData),然后用SendMessage(WM_UPDATEDATA, FALSE)傳消息給窗口,窗口的消息處理肯定是在UI線程里面,這時(shí)候可以用
            LRESULT CProtectPage::OnUpdateData(WPARAM wParam, LPARAM lParam)
            {
            UpdateData(wParam);
            return 0;
            }
            來更新界面,實(shí)驗(yàn)是成功的,ASSERT就被消除了.
                還是有點(diǎn)疑惑,就是剛開始直接在工作線程中調(diào)用UpdateData(FALSE)的時(shí)候,雖然有ASSERT報(bào)錯(cuò),但是結(jié)果還是正確的,似乎沒有什么影響,不知道這個(gè)ASSERT到底意味著什么?

            posted on 2008-09-04 18:14 FongLuo 閱讀(1476) 評(píng)論(1)  編輯 收藏 引用

            評(píng)論

            # re: 在工作線程中更新UI保險(xiǎn)方法 2010-05-04 19:14 nobody

            謝謝分享~~學(xué)習(xí)了,正遇到這個(gè)問題呢  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2009年7月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導(dǎo)航

            常用鏈接

            留言簿

            隨筆分類(11)

            隨筆檔案(79)

            文章檔案(1)

            收藏夾(38)

            學(xué)習(xí)網(wǎng)站

            一般網(wǎng)站

            最新隨筆

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            久久www免费人成看片| 欧美亚洲国产精品久久久久| 国内精品九九久久精品 | 欧美大香线蕉线伊人久久| 一本色综合网久久| 国产精品伦理久久久久久| 久久se精品一区精品二区国产| 久久久久99这里有精品10 | 性做久久久久久免费观看| 久久亚洲精品无码aⅴ大香| 久久久久亚洲av无码专区| 国产女人aaa级久久久级| 国产aⅴ激情无码久久| 2020最新久久久视精品爱 | 狠狠精品久久久无码中文字幕 | 久久久久99精品成人片牛牛影视 | 色综合合久久天天综合绕视看| 欧美国产成人久久精品| 久久精品国产99久久久| 亚洲精品美女久久久久99小说| 久久被窝电影亚洲爽爽爽| 久久久久亚洲AV无码观看| 久久精品国产亚洲精品| 狠狠色丁香婷婷久久综合不卡| 久久久亚洲AV波多野结衣| 久久精品成人免费国产片小草| 国内精品久久人妻互换| 久久AV高潮AV无码AV| 久久一本综合| 久久久久亚洲精品中文字幕| 国产亚洲婷婷香蕉久久精品| 亚洲精品乱码久久久久久| 97香蕉久久夜色精品国产 | 久久久国产亚洲精品| 青青青青久久精品国产 | 亚洲国产另类久久久精品黑人 | 青青草原综合久久大伊人| 久久久久这里只有精品| 国产99久久九九精品无码| 久久久久国产精品| 激情久久久久久久久久|