看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 目前利用VC+postmessage開發 在寫程式的過程發現我寫出來的code在處理post message中的func() 會因下一個trigger到了 又跳去丟一次post message 而造成func()沒法執行完整 希望能有哪位大大能幫忙解決一下~ 感謝~ 希望得到的正確結果: 希望能將post message中所呼叫的func()執行完成OB 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC + WinXP 有問題的code: (請善用置底文標色功能) 以下是pseudo code BEGIN_MSG_MAP(SingleChannelPlaybackView) MESSAGE_HANDLER(WM_GoSetImageToVideo, OnEventToVideo) END_MSG_MAP() onFrameReady() { postmessage(WM_GoSetImageToVideo, reinterpret_cast<WPARAM>(data), 0); } OnEventToVideo() { DEVICE_IMAGE *Img_Info = reinterpret_cast<DEVICE_IMAGE *>(wParam); SetImageToVideo(Img_Info); //這行沒執行完 onFrameReady()就被trigger //然後這行就沒執完 delete Img_Info; return 0; } SetImageToVideo(DEVICE_IMAGE &Img_Info) { if(Img_Info) { push_Frame(); //這個function 內部還會有很多小func() } } 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.160.100
ytli1204:post message 應該會依序執行阿? 還是 03/09 08:42
ytli1204:有什麼資料會被下一個 frame 更新變成不合法? 03/09 08:42
windincloud:他有依序做~ 但是我後來去trace 發現push_Frame()這沒 03/09 08:54
windincloud:沒做完~ 依之前同事說應該是push_Frame()太大~ 所以要 03/09 08:55
windincloud:加上sleep()可以解~ 但我現主管不希望這樣~ XD 03/09 08:56
firose:應該是你 push_Frame() 裡面有去取訊息造成重入吧 03/09 12:50
windincloud:我有去查過~ 可是裡面沒有去取任何msg耶~ 03/09 15:14
ytli1204:不一定是 GetMessage 才會處理訊息 03/09 20:52
ytli1204:把發生問題的 call stack 貼出來就知道了 03/09 20:53