首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

WM_TIMER消息有关问题

2012-08-14 
WM_TIMER消息问题最近想做个MP3播放器.根据WM_TIMER消息同步显示歌词,可是在WM_TIMER消息里面歌词处理还未

WM_TIMER消息问题
最近想做个MP3播放器.根据WM_TIMER消息同步显示歌词,可是在WM_TIMER消息里面歌词处理还未完成,便又收到WM_TIMER消息了,导致数据处理出错程序终止。在WM_PAINT消息里显示也一样.自己猜测是处理歌词用的时间超过WM_TIMER时间间隔了可是改成2s还是这样,难道处理这个花费的时间这么长么[code=C/C++][/code]case WM_TIMER ://不设置SetTimer就没有WM_TIMER消息
timecount=timecount+3000;

while(timecount>=lrc_down[0].time )

if(count==0)
{
KillTimer(hwnd,Timer_ID);
lrc=NULL;
}
else
{
SendMessage(hwnd,WM_PAINT,0,0);
for( j=1;j<5;j++)
wcscpy_s(&lrc_up[j-1].lrcword[0],sizeof(&lrc_up[j].lrcword),&lrc_up[j].lrcword[0]);

memset(&lrc_up[4].lrcword[0],0,sizeof(lrc_up[4].lrcword[0]));
wcscpy_s(&lrc_up[4].lrcword[0],sizeof(&lrc_down[0].lrcword),&lrc_down[0].lrcword[0]);//歌词转移

for( i=1;i<5;i++)
wcscpy_s(&lrc_down[i-1].lrcword[0],sizeof(&lrc_down[i].lrcword),&lrc_down[i].lrcword[0]);
memset(&lrc_down[4].lrcword,0,sizeof(lrc_down[4].lrcword));

showflag=1;
ShowLrc();  
}

}//输出在最后的

return 0;


[解决办法]
着么会呢?如果按你说的WM_TIMER 都没处理完成 返回,就又进呢?这是不可能的,只有当消息正常return后才会再进。
 你这种情况 只能说明你的第二个for循环处理出错了,所以根本没有运行for循环以后的代码就错误终止了。
 调试下就知道了。
[解决办法]
可是在WM_TIMER消息里面歌词处理还未完成,便又收到WM_TIMER消息了,导致数据处理出错程序终止
-----------------
这个是不存在的,windows的消息处理都是同步的,即便一个消息没处理完,又有同样的消息到了,也会等到上一个消息处理完了才会处理下一个,WM_PAINT的话还有可能多个消息合并成一个。
[解决办法]
WM_TIMER消息是不会重入的 它是排队执行的

热点排行