昨天晚上遇到一個問題:
使用?mciSendString? 控制播放多首音樂的時候,出現最后一次播放的音樂無法通過?mciSendString ("close mp3") 關閉音樂的播放。
mciSendString? 在多個線程中調用。
到23點,問題依然沒解決,只好先上床睡覺。
?
今天早上,經過半個小時的研究,終于找到問題的原因。
mciSendString? 在多次的操作: open -> play -> pause -> resume -> close -> open -> play -> ... loop
mciSendString 的所有操作必須在同一個線程中完成!
昨天晚上遇到的問題就是因為?mciSendString 的不同操作在不同的線程中調用,導致在 A線程中的 play 在 B線程中無法通過?mciSendString("close ..") 關閉音樂的播放。
?
但是在程序中,需要使用到多線程,這個時候的解決方案:
先設置幾個 command - id:
enum {id_b_video_preivew_bgsound_play, id_b_video_preivew_bgsound_play_next, id_b_video_preivew_bgsound_pause, id_b_video_preivew_bgsound_resume, id_b_video_preivew_bgsound_close}
?
在不同的線程中,不論 open, play, pause, resume,close, 全通過調用 SendMessage(...,?WM_COMMAND...);? 觸發:
SendMessage(hwnd_frame, WM_COMMAND, MAKEWPARAM(id_b_video_preivew_bgsound_open, 0), 0); //模擬發送 WM_COMMAND
SendMessage(hwnd_frame, WM_COMMAND, MAKEWPARAM(id_b_video_preivew_bgsound_play, 0), 0); //模擬發送 WM_COMMAND
SendMessage(hwnd_frame, WM_COMMAND, MAKEWPARAM(id_b_video_preivew_bgsound_close, 0), 0); //模擬發送 WM_COMMAND
這樣所有的?mciSendString? 的動作都在一個線程中完成( 用戶UI線程 )完成。
?
這樣之前的問題就不存在了。
?
?
名品推薦:簡百靈?朗斐?愛華仕