Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
rtgui_timer_t以及textbox控件的问题
发布于 2012-11-23 13:05:38 浏览:3388
订阅该版
1. textbox控件使用了rtgui_timer(第一个timer)来显示光标,如果另外再开一个rtgui_timer(第二个timer),然后第二个timer中会处理很多事物类似于rt_thread_delay,这样会影响到textbox光标的显示。 大致看了下,这个timer的原理是轮询检查执行,因此两个timer不是并行的,而是串行的。这个感觉不太理想,是否可以像window一样,实现相互不干扰的timer。 2. textbox的timer,在textbox退出的时候会调用timer的rtgui_timer_destory函数。但是如果timer正在执行timeout的回调函数,还是会把这个回调函数执行完。这样问题就来了。textbox退出后,又申请一个控件,基本上控件的内存地址会是刚刚textbox释放的那片空间。这时timeout函数还在执行的话,会操作新申请控件的内容。 我觉得要通过某种机制来等待timeout执行完了之后再销毁textbox。 @bernard @grissiom:元方,此事你怎么看? [s:154]
查看更多
8
个回答
默认排序
按发布时间排序
rtt-fans
2012-11-23
这家伙很懒,什么也没写!
不能在rtgui_timer中调用rt_thread_delay函数,也不能在任何消息处理过程中调用此函数,这样会造成消息不能及时处理,延时了gui线程肯定得等延时完了才能继续运行到消息循环上。 第二个问题可能是你调用rt_thread_delay延时造成的,当延时gui线程的时间比较久的时候,消息队列上可能会蓄积许多消息,你所触发的按键还有定时器消息都会蓄积到消息队列上,因为在这段时间内,并未停止定时器函数,也不能保证你不会触发外部的按键操作,这样就造成消息顺序混乱,如果出现了一个textbox销毁的消息在前,一个定时器的消息在其后,这种完全有可能的,比如你触发的按键消息是可以让textbox退出的,结果此消息没有及时执行,因为你把gui线程给挂起来了,此时又触发了几个rtgui_timer事件,那么消息不就混乱了嘛,你所说的现象不就出现了嘛 呵呵,要取消延时的。
rtt-fans
2012-11-23
这家伙很懒,什么也没写!
>不能在rtgui_timer中调用rt_thread_delay函数,也不能在任何消息处理过程中调用此函数,这样会造成消息不能及时处理,延时了gui线程肯定得等延时完了才能继续运行到消息循环上。 >第二个问题可能是你调用rt_thread_delay延时造成的,当延时gui线程的时间比较久的时候,消息队列上可能会蓄积许多消息,你所触发的按键还有定时器消息都会蓄积到消息队列上,因为在这段时间内,并未停止定时器函数,也不能保证你不会触发外部的按键操作,这样就造成消息顺序混乱,如果出现了一个textbox销毁的消息在前,一个定时器的消息在其后,这种完全有可能的,比如你触发的按键消息是可以让textbox退出的,结果此消息没有及时执行,因为你把gui线程给挂起来了,此时又触发了几个rtgui_timer事件,那么消息不就混乱了嘛,你所说的现象不就出现了嘛 >呵呵,要取消延时的。 --- 这里的问题确实得考虑gui代码的设计,也体现出了许多同志们对gui的原理的不甚了解。
raulshao
2012-11-26
这家伙很懒,什么也没写!
rtt-fans: 1. timer中即使不调用rt_thread_delay,也会出现处理一些需要很多时间来处理的事务啊。所以我还是觉得这个是一个设计的问题。 2. 这个还是与rt_thread_delay无关,这个从原理上来讲是肯定会发生的。因为你无法确定你textbox的timer释放的时候,肯定就已经结束了timer的回调函数。而这个回调函数中的代码就有机会操作新申请的内存。这个就是问题了。
bernard
2012-11-26
这家伙很懒,什么也没写!
因为RTGUI是C/S结构,完全多线程化的模型,为了避免竞争的情况发送,所以把GUI相关的操作都尽量规约到client线程本身的上下文中进行。 RTGUI timer也是这样。如果说在RTGUI timer超时函数中再调用delay,显然这样就导致client线程被延时了,这个是不合理的。
grissiom
2012-11-27
这家伙很懒,什么也没写!
>rtt-fans: > >1. timer中即使不调用rt_thread_delay,也会出现处理一些需要很多时间来处理的事务啊。所以我还是觉得这个是一个设计的问题。 > >2. 这个还是与rt_thread_delay无关,这个从原理上来讲是肯定会发生的。因为你无法确定你textbox的timer释放的时候,肯定就已经结束了timer的回调函数。而这个回调函数中的代码就有机会操作新申请的内存。这个就是问题了。 --- 1,要说是设计问题,那是你程序设计上的问题。delay 的意思是休息一会不干活,既然不干活了,那么光标闪烁这个“活”也就不应该干。如果有耗时的处理,那么就应该细化线程,做异步的处理。做系统要通盘考虑,RTT 也只是保证“可以”有实时性,但是你在一个 ISR 里写个 while(1),用什么 RTOS 都不会有实时性的。 2,textbox 的 timer 是定死的,用户不可修改的,也就是对用户是透明的,不用去管。而且就如 bernard 所说,RTGUI(包括我所了解的其他 GUI 库)都是事件循环型的,事件是一个一个顺序处理的,所以不会存在“正在执行 timeout 函数的时候调用 textbox_destroy” 的情况。 但是 raulshao 有一点提醒了我,就是如果 timeout 事件已经发出并 pending 到队列的后面了,但是应用程序在响应前面事件的时候把 textbox 销毁了,这时再执行 timeout 事件就不对了…… 也就是说,当一个 rtgui_timer 被销毁时,需要连同取消掉其发出的 timeout 事件。这里还需考虑考虑……
raulshao
2012-11-27
这家伙很懒,什么也没写!
grissiom: OK.那我以后处理数据就开线程了,不在timer里面做了,呵呵~ 第二个问题呢,大概是我表述的不太清除,应该就是你说的“pending 到队列”吧。
amsl
2012-11-29
这家伙很懒,什么也没写!
textbox_time_out处理句柄与textbox是处于同一client线程的, rtgui_timer的stop和destory动作由textbox_onunfocus触发, 所以销毁textbox时,它是unfocus的, 在处理textbox_destory时,不可能textbox_time_out只处理一半(同一thread), 除非destory的动作是由另外的线程触发的. 楼主描述的问题是怎么发生的,能提供测试代码吗.
撰写答案
登录
注册新账号
关注者
0
被浏览
3.4k
关于作者
raulshao
这家伙很懒,什么也没写!
提问
12
回答
31
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
rt-thread 小内存算法源码分析
2
env中添加lvgl软件包后,keil编译包--c99错误
3
【NXP-MCXA153】 定时器驱动移植
4
GD32F450 看门狗驱动适配
5
【NXP-MCXA153】看门狗驱动移植
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
5
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
11
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部