社区
Symbian
帖子详情
什么情况下event queue会溢出?
doomm
2004-07-01 11:03:29
我的palm运行一段时间后,会提示event queue is full. 这是怎么回事?palm中装了我自己的短消息程序。
非常着急,大家帮忙啊!!!!!!
...全文
359
21
打赏
收藏
什么情况下event queue会溢出?
我的palm运行一段时间后,会提示event queue is full. 这是怎么回事?palm中装了我自己的短消息程序。 非常着急,大家帮忙啊!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
队列
溢出
(
Queue
overflow)
当队列达到其最大容量时,如果再有新的元素需要入队,就需要采取某种策略来处理这种
情况
,否则就
会
导致队列
溢出
。因此,在设计队列和相关的系统时,应该仔细考虑队列的大小和容量,以及如何处理队列
溢出
的
情况
。队列
溢出
是指当向队列中添加元素时,队列的当前容量已经达到其最大限制,且没有足够的空间来容纳新的元素。扩大队列容量:在某些
情况
下,可以动态地调整队列的大小,以容纳更多的元素。丢弃:当队列满时,可以选择丢弃新到达的元素或者丢弃队列中最早或最晚的元素,以腾出空间给新元素。处理队列
溢出
的策略包括。
写了“死循环”?为什么 setTimeout 无限递归不
会
导致栈
溢出
?
在 JavaScript 中使用 setTimeout 实现无限循环调用(如动态时钟)时,许多开发者
会
本能地担心两个问题:无限递归
会
不
会
导致栈
溢出
(Stack Overflow)?频繁创建对象
会
不
会
引发内存泄漏?本文通过深入分析 JavaScript 的**事件循环(
Event
Loop)机制和调用栈(Call Stack)原理,配合直观的 Mermaid 流程图,揭示了异步调度与同步递归的本质区别。同时,文章也解释了浏览器垃圾回收(GC)**机制如何保障内存安全,彻底消除你对 setTimeout 递归调
什么?用@Async
会
内存
溢出
?看看你的线程池配置了没!
上一篇我们介绍了如何使用@Async注解来创建异步任务,我可以用这种方法来实现一些并发操作,以加速任务的执行效率。但是,如果只是如前文那样直接简单的创建来使用,可能还是
会
碰到一些问题。存在...
[RDMA]Asynchronous
Event
and Errors
IB协议中经常
会
提到Asychronous,它表示。本文主要介绍Asynchronous
Event
与Asynchronous Error的相关内容。
python队列
溢出
_Python:可能
会
丢失数据多处理队列()
假设我有以下示例,其中我创建了一个守护进程并尝试通过事件标志与它通信:from multiprocessing import Process,
Event
,
Queue
import timedef reader(data):input_
queue
= data[0]e = data[1]output_
queue
= data[2]while True:if not e.is_set(): # if...
Symbian
3,119
社区成员
9,182
社区内容
发帖
与我相关
我的任务
Symbian
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
复制链接
扫一扫
分享
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章