請問在自訂訊息處理程式裡 PostMessage 同一個自訂訊息為什麼會造成視窗無法回應 |
尚未結案
|
martindc301
一般會員 ![]() ![]() 發表:1 回覆:3 積分:0 註冊:2009-07-02 發送簡訊給我 |
我想利用自訂訊息的方式造成一個迴圈以處理資料的接收工作,
依照我的想法, PostMessage 可以把訊息放入 Message Queue 中而不需等它執行完畢, 自訂訊息和視窗訊息應該有同等被執行的機會, 但是程式一執行後視窗就完全無法回應了, 不知問題出在哪? 以下是概略的程式碼: //--------------------------------------------------------------------------- // .H //--------------------------------------------------------------------------- BEGIN_MESSAGE_MAP MESSAGE_HANDLER(CM_TEST, TMessage, MyTest) END_MESSAGE_MAP(TForm) //--------------------------------------------------------------------------- // .cpp //--------------------------------------------------------------------------- void __fastcall TForm1::MyTest(TMessage &Message) { // 處理資料接收工作 if(m_TestRun) PostMessage(Handle, CM_TEST, 0, 0); } void __fastcall TForm1::Button1Click(TObject *Sender) { m_TestRun = !m_TestRun; if(m_TestRun) { Button1->Caption = "Stop"; PostMessage(Handle, CM_TEST, 0, 0); } else Button1->Caption = "Run"; } //--------------------------------------------------------------------------- 編輯記錄
martindc301 重新編輯於 2009-07-02 10:02:31, 註解 無‧
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
martindc301
一般會員 ![]() ![]() 發表:1 回覆:3 積分:0 註冊:2009-07-02 發送簡訊給我 |
因為我的觀念還不是很清楚,
所以再澄清一下... 訊息的處理程序是在 Application->Run() 中, PeekMessage 後由 TApplication::OnMessage 到 TApplication::ProcessMessage(), 然後 StdWndProc -> WndProc -> Dispatch, 流程之中也有執行 TApplication::ProcessMessage(), 為何額外加入的 ProcessMessage() 才可以避免視窗無回應, 而原流程中的 ProcessMessage() 卻不行呢? 不建另一 Thread 只是想偷懶, 因為程式不大, 若自訂訊息的迴圈方式可行的話, 我就可以省掉很多 Multi-Thread 的同步考量.
編輯記錄
martindc301 重新編輯於 2009-07-02 22:57:52, 註解 無‧
|
frontier
初階會員 ![]() ![]() 發表:0 回覆:27 積分:30 註冊:2008-11-20 發送簡訊給我 |
訊息流程是一個「流程」,表示是「成串傳遞」的
可能是因為 你自己使用一個自己的函式取代其中一個,沒有將訊息往下傳, 如果沒有,當然是斷掉了,這樣視窗,沒有反應,應該很正常吧 ===================引 用 martindc301 文 章=================== 因為我的觀念還不是很清楚, 所以再澄清一下... 訊息的處理程序是在 Application->Run() 中, PeekMessage 後由 TApplication::OnMessage 到 TApplication::ProcessMessage(), 然後 StdWndProc -> WndProc -> Dispatch, 流程之中也有執行 TApplication::ProcessMessage(), 為何額外加入的 ProcessMessage() 才可以避免視窗無回應, 而原流程中的 ProcessMessage() 卻不行呢? 不建另一 Thread 只是想偷懶, 因為程式不大, 若自訂訊息的迴圈方式可行的話, 我就可以省掉很多 Multi-Thread 的同步考量. |
martindc301
一般會員 ![]() ![]() 發表:1 回覆:3 積分:0 註冊:2009-07-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |