作者windincloud (當你孤單會想起誰)
看板C_and_CPP
標題Re: [問題] WinAPI Post Message後的func()執行問題
時間Sun Mar 21 01:05:57 2010
※ 引述《windincloud (當你孤單會想起誰)》之銘言:
: ( *[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()
: }
: }
: 補充說明:
自問自答:
過了一段時間又回過頭處理這問題~
發現會有這樣狀況是Message Queue在處理Function時
若後續的程式處理出現狀況
這樣會造成Queue無法處理
但Queue後面還有人排隊~
因此就處理後面的人~
原先的ERROR可能就被忽略或傳送到系統內部錯誤訊息Queue處理
所以就造成一直被中斷的假象~
---
這樣的問題似乎會出現在沒設計好的程式上面
所以做專案碰到這樣的問題
請追看看後面的程式是否有些錯誤沒有HANDLE到~
--
接前人的CASE真的很累~
改不動之外 要是設計又差~
真的不知到炸彈埋在哪~ Orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.98.64
推 layan:改用SendMessage或把request queue起來 另開thread dequeue? 03/21 01:20
→ windincloud:我會再去試看看~ 不過我似乎要先了解Message Loop :P 03/21 14:49
→ einstain:當程式執行出現 error 會跳出 dialog box 時 03/22 10:49
→ einstain:那個 dialog box 會有 message loop 處理訊息 03/22 10:50
→ einstain:所以你會看到奇怪的 call stack 或是 function reentry 03/22 10:50