★★★如何得知PlaySound播放完毕?★★★

seaskyfox 2004-11-10 05:34:44
注意,不能指定SND_SYNC
...全文
417 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wasltone 2004-12-25
  • 打赏
  • 举报
回复
先分析WAV文件的长度
chen18s 2004-12-24
  • 打赏
  • 举报
回复
一般的现成函数都会提供说明
最少,都有一个返回值。根据返回值确定函数执行状态比较常用
楼上有位给出了例子啊
dingfuhai 2004-12-24
  • 打赏
  • 举报
回复
不要用计时器反复检测,busyloop的方法很浪费CPU,你干脆自己定义一个消息,当Playsound函数返回时向主线程法一个消息就行了,主线程处理一下这个消息就可以了。
seaskyfox 2004-11-13
  • 打赏
  • 举报
回复
自己顶 ^_^
seaskyfox 2004-11-12
  • 打赏
  • 举报
回复
我这里已经有一个方案,不过需要用多线程

在主线程需要播放声音的地方创建分线程,在分线程中用PlaySound(),指定SND_SYNC方式,分线程等待返回不会影响主线程,返回后分线程自动关闭。

在主线程中设定一个秒计时器,反复检测分线程状态,如果检测到分线程已不存在,就表明声音已自动播放完毕;如果分线程仍在活动,就表明声音仍在播放。

我想知道,有没有更好更简单的方法?
seaskyfox 2004-11-12
  • 打赏
  • 举报
回复
抱歉,我问题表达不清楚,让你没有完全明白。

我说了“不能指定SND_SYNC”,本意是说必须指定SND_ASYNC,即播放声音的同时不能影响其它操作。你的方式实际相当于指定了SND_SYNC,即只有在播放完毕后PlaySound()才能返回值,你单步调试一下就知道了。

你可以参考一下Windows的声音方案设置中的媒体声音播放效果,我就是需要那种效果。
seaskyfox 2004-11-11
  • 打赏
  • 举报
回复
自己顶
I_Love_CPP 2004-11-11
  • 打赏
  • 举报
回复
你没有理解我的意思。
虽然你说的PlaySound()立即返回了,但下面的语句要等播放完毕了才执行
正是利用这点才能用这么简单的语句完成了任务。
造成你误解大概试我没有把注释的位置放对,应该:
//如果能够播放,只有播放完毕了才调用下面的程序。
if(bStartPlay)
{
AfxMessageBox("播放完毕");
}
else
.....

另外,我已经调试成功了。
你可以去试试。
seaskyfox 2004-11-11
  • 打赏
  • 举报
回复
to I_Love_CPP(我爱C++):

  在不指定SND_SYNC的情况下,PlaySound()是立即返回的,即使返回TRUE,也并不能代表当前已经播放完毕。
I_Love_CPP 2004-11-11
  • 打赏
  • 举报
回复
bool bStartPlay(false);
bStartPlay = PlaySound(...);
if(bStartPlay)
{//如果能够播放,只有播放完毕了才调用下面的程序。
AfxMessageBox("播放完毕");
}
else
{
AfxMessageBox("不能播放文件");
}
phoenix_fei 2004-11-10
  • 打赏
  • 举报
回复
每一首音乐的时间不一样,我估计不好测试
打开链接下载源码: https://pan.quark.cn/s/8ec3d104bde6 华为MA5671是一款针对宽带接入需求而研发的智能型光猫设备,其核心应用场景为家庭用户及小型企业环境。该设备运用了千兆以太网技术,能够提供卓越的网络连接性能,从而使用户可以体验到稳定流畅的互联网服务。其完整名称为SmartAX MA5671,其中"SmartAX"是华为对其智能接入产品系列的特定命名,意指该设备具备智能化管理功能与自动化配置特性。固件,即Firmware,是指存储于硬件设备内部的一套程序代码,负责控制设备的各项功能运作并合理调配硬件资源。在华为MA5671设备中,固件发挥着核心作用,它直接影响着设备的操作系统运行机制、网络协议兼容性、安全防护机制以及性能表现等多个维度。"MA5671V8R313C00SPC100"作为该固件的标识编号,通过此代码可以解析出以下几个关键层面的信息: 1. **V8**:这通常象征固件的主版本号,或许表明这是第8代产品形态或第8次主要升级迭代。 2. **R313**:这可能代表固件的次级版本或修订层级,暗示着相较于V8版本,该版本经历了313次的迭代优化。 3. **C00**:这部分或许与设备的特定型号设定或地域适配性相关,不同的C00编码可能对应不同的功能模块配置或区域适应性调整。 4. **SPC100**:最后的这一段编码可能标识着特殊版本或性能增强配置,SPC(Special Performance Configuration)可能是华为针对特定性能优化版本设定的代号,而100可能代表这种优化措施的等级或序列编号。 在实际部署过程中,将固件保持为最新版本是非常重要的,这样做能够有效修正已知的安全隐患,优化设备运作效能,...
代码转载自:https://pan.quark.cn/s/558f943fe8b9 Oracle 11g是由甲骨文公司推出的一款面向企业级应用的数据管理平台,其具备丰富的功能特性与性能优化措施,能够充分满足大型商业机构及组织的复杂数据管理诉求。这份“Oracle 11g官方中文帮助文档”作为一份高清晰度且内容全面的资源,专门为中文使用者提供系统化的操作指引和必要的技术支持。 1. **Oracle 11g核心构成** - 数据库模型:该系统基于关系数据库架构,负责对结构化数据进行系统化存储和处理。 - 实例与服务机制:数据库实例指的是部署在服务器内存中的运行环境,而服务则是客户端接入数据库的核心通道。 2. **部署与设置** - 部署模式:涵盖高级部署流程和快速部署方案,以适应多样化的应用场景。 - 参数配置文件:初始化参数文件(init.ora)用于设定数据库的运行环境参数。 - 逻辑存储与物理存储:表空间作为数据库对象的逻辑组织单元,数据文件则是实际存放数据的物理载体。 3. **SQL与PL/SQL技术** - SQL指令集:主要用于数据库数据的查询、录入、修改及删除等操作。 - PL/SQL编程:作为Oracle的特色编程语言,支持过程化编程范式,常用于开发存储过程和触发器逻辑。 4. **安全防护机制** - 用户身份与角色管理:通过用户账户和角色权限体系来控制数据库的访问权限。 - 授权管理及审计功能:实现数据访问权限的精细化控制,并记录数据库活动日志以保障合规操作。 5. **效能提升策略** - 查询执行优化器:智能选择最优的查询执行路径。 - 重做日志与归档机制:保障事务的持久性和系统故障后的恢复能力。 - 数据分区技术:通过将大型数据表...

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧