找回密码
 注册
搜索
查看: 1671|回复: 12

[讨论] MTK 里一个关于时间的问题

[复制链接]
发表于 2006-10-24 11:04:00 | 显示全部楼层 |阅读模式
我想做这样一个动作,当某件事情成立的时候,去触发我已经写好的一个函数。
比如,5分钟之后触发,或者累计通话时间达到1小时后触发。
在线跪求这两个问题。。。。
谢了。
发表于 2006-10-24 11:14:00 | 显示全部楼层
StartTimer
StopTimer
点评回复

使用道具 举报

 楼主| 发表于 2006-10-24 11:45:00 | 显示全部楼层
可是我用这个会导致死机啊。。。
点评回复

使用道具 举报

发表于 2006-10-25 15:49:00 | 显示全部楼层
StopTimer((U16) TimerID);
        StartTimer((U16) TimerID, TimerTime, TimerCB);

确认可用.simulator, 手机均没有问题.
------------------------------------------------------------------------------------------------------------------------
  从事手机软件开发.目前主要从事MTK平台和智能手机平台研发.
  欢迎有志加入手机行业,以及正在手机行业的同仁跟我交流,合作。
  我的Email:   mobile_life@sina.com
------------------------------------------------------------------------------------------------------------------------
点评回复

使用道具 举报

发表于 2006-11-1 14:18:00 | 显示全部楼层
pixtel_UI_start_timer)(s32 count,void (*callback)(void)
pixtel_UI_cancel_timer)(void (*callback)(void)
count is delay time in mode ms, I had use it, it won't lead to dead
点评回复

使用道具 举报

发表于 2006-11-1 18:45:00 | 显示全部楼层
StopTimer((U16) TimerID);
StartTimer((U16) TimerID, TimerTime, TimerCB);

就可以了
点评回复

使用道具 举报

发表于 2006-11-24 23:01:00 | 显示全部楼层
新建了TimerId,可以用make new一下
点评回复

使用道具 举报

发表于 2006-11-28 22:40:00 | 显示全部楼层
这样肯定不可以的,你定义了这么长的时间,在MTK中TIMER的处理都是一个Queue在管理的,你这样一个长时间在Queue中,如果在队首,那么系统一直在处理这个Timer,其他的Timer就得不到及时的处理,你的有些AP不能正常跑起来,如果严重时就会当机了。
我的建议是:定义一个时间单位,不能太长在10s内,然后用一个循环来达到你这个长时间的定时,其中可以用2到3个Timer来分别跑,一次循环就是一个单位,然后跑完一次,cancel掉一个Timer,然后下一个循环再开始一个Timer,两个不同的timer可以利用循环变量的奇偶性来判断,当然每个Timer的Callback Function的要分别定义,当开始的时候是循环的函数,到你要的时间到了的时候,再把那个Callback Function定义成你要触发真正的一个函数。
点评回复

使用道具 举报

发表于 2007-1-13 10:52:00 | 显示全部楼层
void StartTimer(U16 timerid, U32 delay, FuncPtr funcPtr)
用这个函数就解决鸟~[em06]
点评回复

使用道具 举报

发表于 2007-1-20 15:51:00 | 显示全部楼层
估计您对timer的处理不是很清楚,如果按照你的说法去实现系统的timer,系统还要跑吗。
你以为你设一个timer,timer的管理函数就给你一个死循环,直到你的timer时间到啊?
MTK对Timer的长度好像是有些限制,太长的timer玩不起来。
那就换个方法啊,我设个1S的timer,再设个count,count到了3600不就是1小时了嘛。
当然注意一下,MTK的timer都是单次的,别忘了在Timer的Call back里再次启动Timer。

<DIV class=quote><B>以下是引用<I>winstep</I>在2006-11-28 22:40:00的发言:</B>
这样肯定不可以的,你定义了这么长的时间,在MTK中TIMER的处理都是一个Queue在管理的,你这样一个长时间在Queue中,如果在队首,那么系统一直在处理这个Timer,其他的Timer就得不到及时的处理,你的有些AP不能正常跑起来,如果严重时就会当机了。
我的建议是:定义一个时间单位,不能太长在10s内,然后用一个循环来达到你这个长时间的定时,其中可以用2到3个Timer来分别跑,一次循环就是一个单位,然后跑完一次,cancel掉一个Timer,然后下一个循环再开始一个Timer,两个不同的timer可以利用循环变量的奇偶性来判断,当然每个Timer的Callback Function的要分别定义,当开始的时候是循环的函数,到你要的时间到了的时候,再把那个Callback Function定义成你要触发真正的一个函数。</DIV>
点评回复

使用道具 举报

发表于 2007-1-20 15:54:00 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>Riverain</I>在2006-11-24 23:01:00的发言:</B>
新建了TimerId,可以用make new一下</DIV>



这个是正解,除非你将新增的timer放在timer定义的最后,否则没有
new一下的话,可能会使系统其他的timer乱掉,导致当机。
点评回复

使用道具 举报

发表于 2007-9-5 14:23:00 | 显示全部楼层
请问TimeId都要hardcode在那个枚举定义里面吗?可不可以动态的使用TimeId,例如其中的一个函数:
slTimerid OslIntCreateTimer(PS8 timer_name);
点评回复

使用道具 举报

发表于 2007-9-5 15:12:00 | 显示全部楼层
10楼,11楼说得对。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-25 00:26 , Processed in 0.049095 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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