VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 461|回复: 5

[求助] 如何当到了指定时间时播放音乐?我使用了定时器,我想在到了指定时间后,播放5次音乐

[复制链接]
75_avatar_middle
在线会员 发表于 2017-2-28 22:02:32 | 显示全部楼层 |阅读模式
3驿站币
请问如何当到了指定时间时播放音乐?我使用了定时器,我想在到了指定时间后,播放5次这种音乐。可每次都不响音乐,这不奇怪,我指定了间隔为1秒。请问要如何改代码或写代码

SetTimer(1,1000,NULL);

void CTimerDlg::OnTimer(UINT nIDEvent)
{
        // TODO: Add your message handler code here and/or call default
        CTime t=CTime::GetCurrentTime();
        str=t.Format("%H:%M:%S");
        if(str=="18:00:00")
        {
                for(int i=0;i<5;i++)
                PlaySound("music.wav",NULL,SND_FILENAME|SND_SYNC);
        }
        CDialog::OnTimer(nIDEvent);
}





上一篇:关于typedef函数的理解
下一篇:webbrowser控件不能登录WEBQQ
51_avatar_middle
online_admins 发表于 2017-3-1 00:58:55 | 显示全部楼层
先试着播放一次试试
调试下代码,看看走进 if 条件中了吗?
75_avatar_middle
ico_lz  楼主| 发表于 2017-3-1 12:39:23 | 显示全部楼层
本帖最后由 cumulonimbus 于 2017-3-1 12:55 编辑
Syc 发表于 2017-3-1 00:58
先试着播放一次试试
调试下代码,看看走进 if 条件中了吗?


走到了if条件句中。没用,间隔只有1秒,当然会跳开了。
56_avatar_middle
在线会员 发表于 2017-3-1 15:29:13 | 显示全部楼层
SetTimer(1,1000,NULL);
时间间隔也是1S,建议修改为SetTimer(1,100,NULL);
然后在if里边下断点调试
75_avatar_middle
ico_lz  楼主| 发表于 2017-3-1 15:43:56 | 显示全部楼层
valle 发表于 2017-3-1 15:29
SetTimer(1,1000,NULL);
时间间隔也是1S,建议修改为SetTimer(1,100,NULL);
然后在if里边下断点调试

void CTimerDlg::OnButton1()
{
        // TODO: Add your control notification handler code here
       
        for(int i=0;i<5;)
        {
                i++;
                PlaySound("2.wav", NULL, SND_FILENAME | SND_ASYNC);
        }

}
即使我放在BUTTON里,也只能响一遍。放在定时器里,就亚根儿也不响了
83_avatar_middle
在线会员 发表于 2017-3-1 21:28:45 | 显示全部楼层
这种问题我认为你不应当在这里求得答案.因为这可是提高的好题目.入门前最好就是搞一些类似的题目.虽然没什么鸟用.

其实你先确定可以播放了.然后从逻辑上分析,你看.在ONBUTTON里,你点了一下.它会连续调用了5次,但事实上因为插放的这个函数应当是每被调用一次就开始播放.所以,因为它们间是没有间隔的,那么结果当然是只有最后一次的调用有效了(前四次的调用被覆盖).自然只响一次.而在定时器里,你可要注意到这样的一件事.事实上18:00:00,这个可不一定对.因为事实上如果我没猜错的话.取本地时间得到的是,18:0:0,所以它永远也不被执行,所以自然一次也不响了.那么你可以让它有个地方显示每次时钟周期时那个CSTRING的内容.

那么如何才能让它响五次呢?这是个很简单的逻辑,好好想想并不难发现,最好是当这个WAV放完一次后,马上就再放一次.那就最好. 可以很容易有一些方案.比如说,设五个时钟,然后假设WAV放一次用时2秒,那么就让它每两秒就有个时钟被调用.这样就可以放五次了.但显然,这样有点蠢.为了不使界面的消息循环被暂停,好的办法是起一个线程,然后在里面做个SLEEP.用个FOR来循环放一下就行了.象这样
for(int i=0; i<5; i++) {
playsound(...);
sleep(2000);
}
其实这些最好自己来,就当是玩,然后一点一点加深进去,这对入门很有帮助.
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-24 14:07

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表