5695|15

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE消息队列是否存在堵塞的问题? [复制链接]

环境:wince5.0, 硬件 研华 pcm-9375, 加载了声音驱动。
问题: 程序中需要发出声音,使用playsound 函数, 发音单独使用完全正常。但是如果设备静置2分钟以上,没有操作,自动发声函数playsound 执行成功,却发不出声音。此时操作一下鼠标、或者触摸屏,类似与激活设备,立即发出声音。

分析:为了分析问题,屏蔽其他代码的影响。新建一个对话框程序,在OnInitDialog()里面设置2分钟定时器
   SetTimer(1,2*60*1000,NULL);

   然后在OnTimer()事件中 写发声代码
    PlaySound("a.wav",NULL, SND_FILENAME |SND_ASYNC|SND_LOOP );

   静置等待,发现中间如果没有操作设备,函数执行成功(通过调试信息观察),但是不发声;如果有操作,则正常。
   
   我怀疑是否长时间不操作设备,wince自动会进入cpu休眠或者类似省电模式。
   设置remote kernel tracker调试工具,发现进程长时间阻塞后,在定时有wait for multip object 等事件。
   观察 remote spy, 确实有 timer 消息执行,证明 定时器肯定执行了,但是 playsound 有时候为什么不出声呢?
一碰设备,激活程序或者 wince,立马出声?
   
   这个问题折磨3天了, 盼高人救我!
此帖出自WindowsCE论坛

最新回复

就是休眠引起的省电,声卡不发生. 取消该状态,问题解决.撒分!  详情 回复 发表于 2009-11-2 21:54
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自顶一下!
  感觉不单单是静置后声卡发生的问题,可能涉及wince的调度等根本问题,我却不知,真是惭愧!
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
贴中写错了,改为
  PlaySound("a.wav",NULL, SND_FILENAME |SND_ASYNC|SND_LOOP );
   
   实际测试中未错,结果一样。
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
我看像是声卡进了休眠模式,没有被唤醒
你看看你相同的程序在其他设备上有没有问题?
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
没大看明白
大概意思应该说是执行发音的函数执行了,但是声音没有出来,是么?
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
你的问题应该跟消息堵塞没有关系。
改为PlaySound("a.wav",NULL, SND_FILENAME |SND_ASYNC ); 试试看,就是去掉SND_LOOP 。
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
另外,你看看PlaySound的返回值是多少。
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
感谢大家回复。
    ruritanian :“声卡进了休眠模式,没有被唤醒 ”有些道理,我怀疑是否其他任务也会进入休眠,但是ce相关资料没有说明。
    guopeixin:发音函数执行成功了,但是没音。
    sunrain_hjb: 返回值我查了,是true,长时间静置后仍然没音。去掉SND_LOOP 参数,我试试。
   
   
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
参考帖子 屏幕休眠的问题,感觉也是 同样的问题。改注册表试试
此帖出自WindowsCE论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
你用示波器测一下是声音信号,看是没信号出来,还是出来了声音但信号被减弱了。
此帖出自WindowsCE论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
要测试是不是进入休眠状态,你可以测一下主频有没有被降就知道了
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
我感觉这种情况的休眠不是大家所说的 cpu节能,而是由于电源状态超时,引起的一种用户状态的改变,至于这种用户状态有哪些表现,还不清楚。准备从以下注册表下手:
   
    "ACUserIdle"=dword:0        ; in seconds
    "ACSystemIdle"=dword:0      ; in seconds
    "ACSuspend"=dword:0        ; in seconds
    "BattUserIdle"=dword:0      ; in seconds
    "BattSystemIdle"=dword:0    ; in seconds
    "BattSuspend"=dword:0      ; in seconds
   
    每种状态具体意义,不知哪里有说明。
此帖出自WindowsCE论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 9 楼 billy14 的回复:
你用示波器测一下是声音信号,看是没信号出来,还是出来了声音但信号被减弱了。

顶,到底是多长时间的间隔才会出现这样的问题,1000ms?1500ms?
此帖出自WindowsCE论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 
如果担心是CPU进入低耗状态,那么在OAL里面吧OEMIdle()函数搞为stub就不会进入低耗,然后,你在看看效果,如果问题依旧,那么 显然搞错问题来源了,
--
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 
AP上有个SetPowerRequirement可以设置应用需要的设备电源状态,这样这个程序在运行时可以不进入低耗状态,判断是不是这个问题再说
此帖出自WindowsCE论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

16
 
就是休眠引起的省电,声卡不发生. 取消该状态,问题解决.撒分!
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表