什么情况下event queue会溢出?

doomm 2004-07-01 11:03:29
我的palm运行一段时间后,会提示event queue is full. 这是怎么回事?palm中装了我自己的短消息程序。

非常着急,大家帮忙啊!!!!!!
...全文
357 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
billpalm 2004-08-24
  • 打赏
  • 举报
回复
大家说的非常好!

nilEvent确实不是在EventQueue中的。调用EvtGetEvent之后,如果EventQueue中没有event或者EvtGetEvent操作超时,EvtGetEvent都会返回一个nilEvent,这个nilEvent是EvtGetEvent产生的,而不是从EventQueue中获得的。

一般来说,我们不会处理nilEvent。但是在一些需要长时间处理的程序(如通信过程中的数据传输等)当中,建议频繁调用EvtGetEvent来产生nilEvent,在响应nilEvent时调用需要长时间处理的程序。这样既可以保证通信的顺畅,同时也能够确保不遗漏其它的事件。
monsterli 2004-08-14
  • 打赏
  • 举报
回复
别急,看完奥运开幕式再说嘛,哈哈!
wwstudio 2004-07-30
  • 打赏
  • 举报
回复
据我所知,在PALM OS 3.5事件队列好像只能容纳5个事件。如果出现上述情况,可些代码强制系列先处理完队列中的事件。
nowaytolive 2004-07-27
  • 打赏
  • 举报
回复
不错的帖子,顶顶,让大家都看看!!!
wilderwang 2004-07-08
  • 打赏
  • 举报
回复
嗯,EvtGetEvent(&eventP, evtWaitForever)取出的nilEvent不一定是EventQueue里的,开始说的那样我想想也觉得不对

但是你上面的代码在很多的机器上那个对话框是不会出现啊,而在SONY的SIM上,则是不断的出现,EvtEventAvail()就是true的
sinon 2004-07-08
  • 打赏
  • 举报
回复
事实上...EvtGetEvent(&eventP, evtWaitForever)不一定就是一直停着...当到达某一等待时刻的时候,OS就不继续等待...而返回一个nilEvent了..这个nilEvent不是从队列里面取出来的,而是简单由EvtGetEvent()构造出来的...再仔细看看nilEvent的含义说明就很容易理解了...


有兴趣的话可以再试试我前面的代码...斟酌一下其中的运行机制就很容易理解了...

我感觉问题就在于对nilEvent的含义的理解...

如果要取得一个官方的正统解释,我建议给Ben Combee写一个EMAIL请教一下这个问题,或者可以问问这里的BILLPALM...都是PALMSOURCE的DTS....

wilderwang 2004-07-07
  • 打赏
  • 举报
回复
用EvtGetEvent,而且参数是evtWaitForever

取出来的不是队列里的吗?不知道还有什么情况

Simulator虽然不是100%模拟,但是我认为它的逻辑关系是没错的,就是模拟中队列里有nilEvent,实际也有
sinon 2004-07-07
  • 打赏
  • 举报
回复
EvtGetEvent()返回nilEvent不表示这个nilEvent就是从事件队列里面取出来的,可能是你对nilEvent有点不准确...

Simulator和真正的硬件其实有不少区别...连EMULATOR这种模拟程度这么高的形式,都有明显的特征...所以用simulator来判断不见得准确...而且从我上面的说法...

刚好之前做过一个实验...可以证明在事件队列为空的情况下...TREO600也能正常更新信号的..

好象通过事件方式来实现...系统的行为比较一致...但是系统不能保证事件队列一定能被及时取时间...
PALMOS6以前的OS,都只有唯一的一个事件队列...只往队列添加事件而不取,最终就会导致事件队列溢出....作为一个OS来说,是没理由保留这种潜在的危险的...
wilderwang 2004-07-07
  • 打赏
  • 举报
回复
你可能还是没有理解我的意思,或者我以前说的不清楚

我上面描述的是很奇怪,但确实是这样的
wilderwang 2004-07-07
  • 打赏
  • 举报
回复
好吧,我改变我的说法
我的意思是说,只要在代码中出现
EvtGetEvent(&eventP, evtWaitForever);
那么在很多机器中,只要没有任何事件发生(用户没有点击屏幕之类的),那么它是一直停在那里的,应该就是说是阻塞的

但是在SONY的机器上
还是同样的代码,同样没有任何操作,但是它就是会莫名其妙的得到一个nilEvent,当然一般来说,我会把它pass给SysHandleEvent,之后是你的handler,即使检测到nilEvent的话,也不会发生什么

至于系统内部是如何实现的,它是不是会一直不断的加进去我就不太清楚了,应该不是的,应该是在没事做的话,在加一个nilEvent吧
sinon 2004-07-07
  • 打赏
  • 举报
回复
我不是说队列中不能有nilEvent,你显式往队列放入一个nilEvent,队列中就会有一个nilEvent...

我说的是系统是尽可能不往队列里面添加事件的...因此基本上没事干/没打算干事的时候....OS是不往事件队列里面添加事件的...
sinon 2004-07-07
  • 打赏
  • 举报
回复
evtWaitForever != forever...实际上到某个时刻就会停止等待...

EvtSetNullEventTick()就可以改变nilEvent发生的时间间隔...

你可以在CLIE的SIMULATOR用下面的代码来检查一下...
Boolean avail = EvtEventAvail();
EvtGetEvent(&event, evtWaitForever);
if(event.eType == nilEvent && avail)
{
FrmCustomAlert(InfoOKAlert, "nilEvent from queue", 0, 0);
}

现在讨论的这个问题...恰好就是SIM和真正设备的区别所导致的...
CPU,晶振等的硬件不同...导致了对时间计算的不同...
最明显的是默认情况下...SysTicksPerSecond()返回的值在SIM和真正机器不一样...
wilderwang 2004-07-06
  • 打赏
  • 举报
回复
你可以编一个程序,不断取event,并输出出来,有些机器,主要是sony的就会有很多nilEvent

或者简单点,运行SONY的simulator,那里可以显示View Event,你可以看到,它是不断的有nilEvent产生的,这绝对不是当前程序添加进去的,你可以自己写个什么都不做的程序,运行,也会这样,大概是一秒产生一个nilEvent吧

Treo600,同样,当你掉用它的api显示信号的时候,他也会经常产生nilEvent,我想这可能应该是为了更新他的信号图标吧。

虽然可以说不用nilEvent也可以达到类似的目的,但是可能通过事件的方式,系统的编码更简单,也更结构化吧,而且似乎也没有sdk上说,系统不会产生多余的nilEvent啊,所以,这也不能算是一个bug
doomm 2004-07-05
  • 打赏
  • 举报
回复
谢谢大家!

发现还是太多sms到达的事件没有处理,从而导致queue溢出了。

再次谢谢大家的热情帮助!!!
sinon 2004-07-05
  • 打赏
  • 举报
回复
To wilderwang:

很好奇你是怎么确定这些机器会自动添加nilEvent?OS本身不需要往事件队列添加nilEvent来实现某些目的...OS完全可以在脱离事件队列来实现这些内部功能需求....

基本上...如果OS真的每隔一两秒就往event queue添加一个nilEvent,那么可以认为是OS的一个BUG了...
sinon 2004-07-02
  • 打赏
  • 举报
回复
估计事件是你自己添加的,没有事情发生的时候,系统一般不会添加事件到队列中....

是不是你的代码中出现类似递归的情况,无意中添加太多的事件到队列中....

把代码贴出来最容易找出问题了...
wilderwang 2004-07-02
  • 打赏
  • 举报
回复
没有事情发生的时候,有些机器,如sony的一些,也会一两秒就添加一个nilEvent的,可能是给系统内部用吧
wilderwang 2004-07-02
  • 打赏
  • 举报
回复
有些机器会每隔一两秒往EventQueue里添加一个nilEvent的
Badistuta 2004-07-02
  • 打赏
  • 举报
回复
是不是太多短消息到达event没有处理?
doomm 2004-07-01
  • 打赏
  • 举报
回复
可是我没有刻意往queue里添加event呀。

什么情况下有可能会往queue中添加event?
加载更多回复(1)

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧