Brew的计时器有关问题
发布时间:2010-05-30 20:19:27 文章来源:www.iduyao.cn 采编人员:星星草
Brew的计时器问题
我设计了一个计时器来实现动画, 可是动画效果越来越慢, 这是为什么呢?
// 计时器回调函数
void CBREW_TimerApp::P_Timer(CBREW_TimerApp* pMe)
{
x += 0.5;
y += 0.5;
ISHELL_PostEvent(pMe->m_pIShell, AEECLSID_BREW_TIMER, EVT_TIMER, 0, 0);
}
boolean CBREW_TimerApp::onEvent(AEEEvent evt, uint16 wParam, uint32 dwParam)
{
switch(evt)
{
case EVT_APP_START:
{
IDISPLAY_ClearScreen(m_pIDisplay); // 清屏
g_pIImage = ISHELL_LoadImage(m_pIShell, "Player.png");
IIMAGE_Draw(g_pIImage, x, y);
IDISPLAY_Update(m_pIDisplay); // 更新
ISHELL_SetTimer(m_pIShell, CurTime, (PFNNOTIFY)P_Timer, this);
return TRUE;
}
case EVT_APP_SUSPEND:
return TRUE;
case EVT_APP_RESUME:
return TRUE;
case EVT_APP_MESSAGE:
return(TRUE);
case EVT_KEY:
{
switch(wParam)
{
case AVK_CLR:
return TRUE;
case AVK_UP:
case AVK_DOWN:
case AVK_LEFT:
case AVK_RIGHT:
case AVK_SELECT:
break;
default:
break;
}
break;
}
case EVT_COMMAND:
{
break;
}
case EVT_APP_STOP:
ISHELL_CancelTimer(m_pIShell, (PFNNOTIFY)P_Timer, this);
IIMAGE_Release(g_pIImage); // 释放
return TRUE;
case EVT_TIMER: // 计时器消息
//画图片
IDISPLAY_ClearScreen(m_pIDisplay);
IIMAGE_Draw(g_pIImage, x, y);
IDISPLAY_Update(m_pIDisplay);
ISHELL_SetTimer(m_pIShell, CurTime, (PFNNOTIFY)P_Timer, this); // 重新开启计时器, 实现循环
return TRUE;
default:
break;
}
return FALSE;
}
------解决方案--------------------
你这个timer实现的有点诡异
常见的做法是ISHELL_SetTimer(m_pIShell, CurTime, (PFNNOTIFY)P_Timer, this);
然后在P_Timer函数实现里面直接做你的EVT_TIMER里面的事情
就是说P_Timer的实现类似于:
void CBREW_TimerApp::P_Timer(CBREW_TimerApp* pMe)
{
x += 0.5;
y += 0.5;
IDISPLAY_ClearScreen(m_pIDisplay);
IIMAGE_Draw(g_pIImage, x, y);
IDISPLAY_Update(m_pIDisplay);
ISHELL_SetTimer(m_pIShell, CurTime, (PFNNOTIFY)P_Timer, this); // 重新开启计时器, 实现循环
}
这样就不需要你这个异步的EVT_TIMER的消息处理了
你试试看 ,可能会好一点
------解决方案--------------------
楼主接timer消息的话是会延迟,毕竟要向消息队列放置消息,并再次取出
另外休眠模式时是通过降了电压降了频率吧,所以会慢很多
------解决方案--------------------
尝试一下:
1)直接调用IShell_settimer而不是发送事件
2)处理EVT_APP_NO_SLEEP事件,直接返回TRUE
------解决方案--------------------
SLEEP了
------解决方案--------------------
直接用ISHELL_SETTimer试一下,不用发消息
------解决方案--------------------
补充一下ISHELL_PostEvent是异步调用的
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
什么情况下应用会收到EVT_KEY_HOOK_XXX事件
最近调代码的时候,发现应用莫名其妙地收到了EVT_KEY_HOOK_XXX事件,而没有捕获到我真正...
-
怎么让数字转化成字符串?
我的程序,需在手机上显示一些记录的条数,这些条数不是固定的,视情况而定,我需要把记录的条数显示到手机...
-
如何获取基站CellID信息
RT
------解决方案--------------------
IPOSDET_GetSectorInfo这个接口...
-
文本的字体显示问题;和保存.txt时,在模拟器上保存成功,到真机上就保存失败,这是什么原因?
我资源管理里面加载的汉子是直接从网上下载...
-
BREW如何获取手机号码
BREW如何获取手机号码
------解决方案--------------------
如果在联网的时候使用了CTWAP的网关,可以从ht...
-
关于BREW里面的电池条问题?怎么才能知道这个电池条是否处于关闭或者打开的状态?
C/C++ code
HTC_SetAnn(pMe->a.m_pIDisplay,0);
...
-
我快崩溃了
切分一行两列的窗口时,左边的视图类是:(一个对话框资源,里面包含树形控件,同时为该对话框添加了一个类,但基类是CFormView)。...
-
关于BREW资源编辑器,里面加载的汉字的极限?
我用资源编辑器加载汉字,我大量的加载汉字,结果就出现问题。加载几百个汉字,模拟器上不会...
-
BREW里面的动画是怎么播放的?
我用了 高通SDK 下的 BCI软件编辑了个 4帧的动画,保存成.bci文件,然后通过资源管理器加载进去。
ISHEL...
-
急啊,求大侠啦!
各位大侠,小弟初学BREW MP,现在已安装BMP_SDKMP_7.10.12_ZHCN_SETUP,在VS 2010的工具栏里也有BMP的插件,但是为什么插...