昨天晚上遇到一个问题:

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

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

mciSendString 多线程播放多首音乐 & 注意事项的更多相关文章

  1. Android之通过网络播放一首简单的音乐

    首先,附上程序执行后的效果.例如以下图所看到的: 一.部署一个web项目到tomcatserver上: 1.这个小程序是结合网络来播放一首音乐的,首先,把我们搞好的一个web项目放置在tomcat安装 ...

  2. 首页音乐播放器添加"多首音乐"

    添加音乐播放器可以去这个博主的网址参考学习 原文链接:http://www.cnblogs.com/RhinoC/p/4695509.html 以下是针对添加“多首音乐”的详细过程: (注:由于之前并 ...

  3. iOS 播放远程网络音乐的核心技术点

    一.前言 这两天做了个小项目涉及到了远程音乐播放,因为第一次做这种音乐项目,边查资料边做,其中涉及到主要技术点有: 如何播放远程网络音乐 如何切换当前正在播放中的音乐资源 如何监听音乐播放的各种状态( ...

  4. FFmpeg学习5:多线程播放视音频

    在前面的学习中,视频和音频的播放是分开进行的.这主要是为了学习的方便,经过一段时间的学习,对FFmpeg的也有了一定的了解,本文就介绍了 如何使用多线程同时播放音频和视频(未实现同步),并对前面的学习 ...

  5. 在iOS微信浏览器中自动播放HTML5 audio(音乐)的2种正确方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. CTF-练习平台-Misc之 听首音乐

    十九.听首音乐 用软件audacity打开后发现如下 上面那一行是可以看做摩斯电码,翻译过来是: ..... -... -.-. ----. ..--- ..... -.... ....- ----. ...

  7. VC用MCI播放mp3等音乐文件

    VC播放mp3等音乐文件,可以使用MCI.MCI ( Media Control Interface ) ,即媒体控制接口,向基于Windows操作系统的应用程序提供了高层次的控制媒体设备接口的能力. ...

  8. C++多线程调试和测试的注意事项

    在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”.利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开 ...

  9. pygame “音乐盒”---- 播放一首歌& 点击对话框后背景以及对话框大小改变

    有时,你用pygame写的游戏也许需要播放一些背景音乐,该怎么做呢,直接上代码: 下面的代码,有关于: 1>设置对话框图标.大小.标题 2>播放音乐 3>设置背景图片,以及获取背景图 ...

随机推荐

  1. idea 方便的设置代码段

    使用快捷键(ctrl+alt+s)找到:从idea的菜单File->Settings->Editor->Live Templates 先添加Template Group,然后添加Li ...

  2. python学习笔记(5)-基本数据类型-字符串类型及操作

    一.字符串 字符串由一对单引号或者双引号表示,如”abc“,‘中国’,字符串是字符的有序序列,可以对其中的字符进行索引.字符串也可以用三单引号或三双引号表示,可以表示多行字符串,一对单引号或双引号仅表 ...

  3. Bootstrap之表格、表单应用

    代码: <!DOCTYPE html> <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml&q ...

  4. Running Web API using Docker and Kubernetes

    Context As companies are continuously seeking ways to become more Agile and embracing DevOps culture ...

  5. Nginx Tcp四层反向代理

    L:117 //nginx反向代理代码 server{ listen ; proxy_pass localhost:; //指向上游服务器 proxy_protocol on; //启用对上游传递协议 ...

  6. 【RNN】资源汇总

    wesome Recurrent Neural Networks A curated list of resources dedicated to recurrent neural networks ...

  7. 最简单的Spring Security配置示例

    代码结构: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...

  8. BZOJ4873[Shoi2017]寿司餐厅——最大权闭合子图

    题目描述 Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个 代号ai和美味度di,i,不同种类的寿司有可能使用相同的代号.每种寿司的份数都是无 ...

  9. Codeforces510 C. Fox And Names

    Codeforces题号:#510C 出处: Codeforces 主要算法:判环+拓扑 难度:4.2 思路分析: 要是把这道题联系到图上就很容易想了. 如何建图?由于最后要求名字满足字典序,所以不妨 ...

  10. mac centos linux 安装PHP扩展 INTL(国际化) ———— error: 'ext/standard/php_smart_str.h'

    PHP简单源码安装扩展 五个步骤: 详细说明下: cd /fujieace/php7.0/ext/intl:#进入INTL扩展目录? 在编译扩展时候需要phpize准备环境,准备程序需要获取这个目录的 ...