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

            小明思考

            高性能服務(wù)器端計(jì)算
            posts - 70, comments - 428, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            SendMessage 和 SendMessageTimeout

            Posted on 2006-07-21 09:50 小明 閱讀(10335) 評(píng)論(5)  編輯 收藏 引用 所屬分類: Win32
            SendMessageTimeout并不是簡(jiǎn)單在SendMessage加上Timeout的功能。

            MSDN上面有一段文字是這樣說(shuō)的

            If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message. However, the sending thread will process incoming nonqueued messages while waiting for its message to be processed. To prevent this, use SendMessageTimeout with SMTO_BLOCK set. For more information on nonqueued messages, see Nonqueued Messages.


            翻譯一下:

            SendMessage : 如果指定窗口由調(diào)用線程創(chuàng)建,那么窗口過(guò)程會(huì)被當(dāng)成一個(gè)子程序立即調(diào)用。如果指定窗口由另外一個(gè)線程創(chuàng)建,那么系統(tǒng)會(huì)切換到那個(gè)線程,并且調(diào)用合適的窗口過(guò)程。在線程之間傳遞的消息僅僅當(dāng)接收線程執(zhí)行message retrieval code才會(huì)被處理。發(fā)送線程會(huì)被堵塞直到接收線程處理完消息。但是,發(fā)送線程在等待的同時(shí)會(huì)處理收到的nonqueued messages 。為了阻止這一點(diǎn),使用帶有SMTO_BLOCK參數(shù) 的SendMessageTimeout .

            =================================華麗的分割線===========================

            我曾經(jīng)遇到這個(gè)問(wèn)題,我調(diào)用SendMessage向另外一個(gè)線程窗口發(fā)message,本來(lái)以為他會(huì)一直block住,但是他卻調(diào)用了另外一個(gè)消息的處理程序,導(dǎo)致了行為不正確。所以一定要小心使用SendMessage發(fā)給其他線程的窗口。

            我修改了一下,把
            pWnd->SendMessage(MSG_LOG_MESSAGE, nMsgType, (LPARAM)(LPCTSTR)m_cstrMessage);
            改成了
            HWND hWnd = pWnd->GetSafeHwnd();
            ::SendMessageTimeout(hWnd,MSG_LOG_MESSAGE, nMsgType, (LPARAM)(LPCTSTR)m_cstrMessage,SMTO_BLOCK,15000,0);
            解決了這個(gè)bug.

            Feedback

            # re: SendMessage 和 SendMessageTimeout  回復(fù)  更多評(píng)論   

            2006-12-27 15:02 by honey
            好!!!雖然我看不懂寫(xiě)些什么

            # re: SendMessage 和 SendMessageTimeout  回復(fù)  更多評(píng)論   

            2009-02-12 14:50 by lijinyan3000
            沒(méi)看明白啊。。。可能是我水平不夠。。。

            # re: SendMessage 和 SendMessageTimeout  回復(fù)  更多評(píng)論   

            2011-11-17 10:56 by 寂寞男生
            哥也沒(méi)看懂呀!!!

            # re: SendMessage 和 SendMessageTimeout  回復(fù)  更多評(píng)論   

            2012-02-20 15:59 by zhgkun
            首先英文翻譯的的比較準(zhǔn)確、專業(yè)!
            正在研究SendMessage和SendMessageTImeOut區(qū)別,其中一個(gè)例子是,啟動(dòng)應(yīng)用程序新實(shí)例前,向已存在的實(shí)例發(fā)送copydata消息做一些處理,原先用的是sendmessage,現(xiàn)在覺(jué)得用sendmessagetimeout應(yīng)該更穩(wěn)妥一些

            # re: SendMessage 和 SendMessageTimeout  回復(fù)  更多評(píng)論   

            2012-02-20 16:21 by zhgkun
            LRESULT SendMessageTimeout(
            HWND hWnd, // handle to window
            UINT Msg, // message
            WPARAM wParam, // first message parameter
            LPARAM lParam, // second message parameter
            UINT fuFlags, // send options
            UINT uTimeout, // time-out duration
            PDWORD_PTR lpdwResult // return value for synchronous call
            );

            fuFlags
            [in] Specifies how to send the message. This parameter can be one or more of the following values

            SMTO_ABORTIFHUNG
            Returns without waiting for the time-out period to elapse if the receiving process appears to be in a "hung" state.

            順便翻譯一下最后一句
            “如果接收進(jìn)程處于掛起狀態(tài),不再等待(超時(shí))直接返回”
            久久久久亚洲av无码专区| 精品综合久久久久久88小说| 99久久亚洲综合精品网站| 国产精品久久精品| 9999国产精品欧美久久久久久 | 狠狠色婷婷综合天天久久丁香| 曰曰摸天天摸人人看久久久| 精品免费久久久久国产一区| 99久久综合国产精品免费| 麻豆亚洲AV永久无码精品久久| 中文字幕成人精品久久不卡| 国产成人久久精品一区二区三区| 国产精品青草久久久久婷婷| 久久久久一本毛久久久| 97久久久久人妻精品专区| 日韩影院久久| 久久青草国产精品一区| 久久久无码一区二区三区| 久久免费大片| 91亚洲国产成人久久精品| 99国产欧美精品久久久蜜芽| 综合久久一区二区三区| 青青热久久综合网伊人| 久久婷婷五月综合国产尤物app| 久久人妻少妇嫩草AV无码蜜桃| 久久精品国产亚洲AV大全| 亚洲欧美日韩精品久久亚洲区| 天天久久狠狠色综合| 久久精品午夜一区二区福利| 久久涩综合| 久久精品亚洲精品国产欧美| 热re99久久精品国产99热| 久久超碰97人人做人人爱| 国产A三级久久精品| 久久只这里是精品66| 日本亚洲色大成网站WWW久久| 激情久久久久久久久久| 免费观看成人久久网免费观看| 97超级碰碰碰久久久久| 99久久99这里只有免费费精品| 久久精品人成免费|