作者windincloud (當你孤單會想起誰)
看板C_and_CPP
標題[問題] WinAPI Post Message後的func()執行問題
時間Tue Mar 9 01:51:37 2010
( *[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