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

            閱讀排行榜

            国产精品99久久久精品无码| 99精品国产免费久久久久久下载 | 久久亚洲AV成人出白浆无码国产| 久久久无码精品亚洲日韩京东传媒| 四虎国产精品成人免费久久 | 久久人妻无码中文字幕| 少妇久久久久久被弄高潮| 久久精品免费一区二区三区| 久久久受www免费人成| 久久一日本道色综合久久| 久久精品无码免费不卡| 亚洲国产另类久久久精品小说| 一本一道久久精品综合| 久久天天躁狠狠躁夜夜不卡| 青青草国产精品久久| 久久人妻AV中文字幕| 久久精品国产一区二区| 韩国无遮挡三级久久| 国内精品久久久久久久久电影网| 国产精品久久久久一区二区三区 | 一本色综合网久久| 欧美精品福利视频一区二区三区久久久精品| 99久久精品免费看国产一区二区三区| 国产L精品国产亚洲区久久 | 天堂久久天堂AV色综合| 欧美大战日韩91综合一区婷婷久久青草 | 国产高潮国产高潮久久久91| 麻豆成人久久精品二区三区免费 | 精产国品久久一二三产区区别| 99久久人人爽亚洲精品美女| 久久综合给合久久狠狠狠97色 | 久久婷婷激情综合色综合俺也去| 香港aa三级久久三级老师2021国产三级精品三级在 | 亚洲天堂久久精品| 国产精品久久99| 99国产精品久久| 精品国产一区二区三区久久| 久久精品国产一区| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 日本国产精品久久| 亚洲国产精品成人久久蜜臀|