zoukankan      html  css  js  c++  java
  • mciSendString 多线程播放多首音乐 & 注意事项

    昨天晚上遇到一个问题:

    使用 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线程 )完成。

    这样之前的问题就不存在了。

  • 相关阅读:
    JavaMail
    Web的文件下载
    Web的文件上传
    Tcp 数据对象传输接口对象设计
    m个元素中选取n的组合
    PyQT Quick Start
    版本发布自动触发测试
    plantUML 实操
    Python 版本对比
    Some Python Tricks
  • 原文地址:https://www.cnblogs.com/personnel/p/7721737.html
Copyright © 2011-2022 走看看