|
请教下,关于guix 的 _cbWindow_event_process 事件处理函数疑惑 ?
UINT _cbWindow_event_process (GX_WINDOW *widget, GX_EVENT *event_ptr)
{
GX_VERTICAL_LIST *list;
WINDOW_LIST_CONTROL_BLOCK *screen = (WINDOW_LIST_CONTROL_BLOCK *) widget;
switch (event_ptr->gx_event_type)
{
case GX_EVENT_SHOW: //初始化完成后就会执行这个事件处理 B
/* Start a timer to update current time. */
/*
guix 定时器 更新时间计算方法
1. 如果想设置 guix 定时器每秒 更新 4次,那么就是 1000/4=250 ms
因为 guix 定时器的时基设置为 2ms,所以需要设置定时器的参数为:
方法如下:
a. 第三个为 1,第四个为 125 , 计算方法 250ms/2ms(1*2=2ms)=125
b. 第三个为 5 , 第四个为 25 , 计算方法 250ms/10ms(5*2=10ms) = 25
c. 组合有很多种,根据自己喜好设置即可
2. ThreadX 内核系统时钟节拍为 1000Hz,即 1ms, 那么guix 定时器 时基设置由
宏定义 GX_SYSTEM_TIMER_TICKS 来确定,如果此值为 2,则表示 guix 定时器时基为 2ms
*/
// gx_system_timer_start((GX_WIDGET *)widget, GX_TIMER_ID_LIST, 1, 25); // 定时器设置总的溢出时间为 1*25*2 = 50 ms
// // 因为 guix 定时器设置的 节拍为 2ms,所以 第三个参数 1 表示的是 2ms
// // 如果第三个参数设置为 2,那么定时器时基就是 4ms 了
// // guix 时基 有宏 GX_SYSTEM_TIMER_TICKS 这个来决定
// // 第四个参数不能够 < 5 , 切记切记,因为小于5后误差就比较大,参数必须是 >= 6 定时时间才比较准备
//
__log(" list 2\n");
gx_window_event_process(widget, event_ptr);
break;
case GX_EVENT_HIDE: // 进入此界面后进行相关的初始化操作 A, 相当于进入界面前的初始化
/* Stop car lights animation timer. */
// gx_system_timer_stop((GX_WIDGET *)widget, GX_TIMER_ID_LIST);
__log("list 1\n");
/* Call default window event process. */
gx_window_event_process(widget, event_ptr);
break;
case GX_EVENT_TIMER:
{
if(event_ptr->gx_event_payload.gx_event_timer_id == GX_TIMER_ID_LIST)
{
/* Update current time. */
}
break;
}
// 获取列表条目数据
case GX_SIGNAL(MUSIC_ID_PATIENT_LIST, GX_EVENT_LIST_SELECT):
{
break;
}
default:
return gx_window_event_process(widget, event_ptr);
}
return 0;
}
疑惑描述:
0a. 刚开机第一次进入事件处理界面时:
01. GX_EVENT_SHOW 先执行,完成后就退出
0b. 第二次及后续的任 一 一 次
01. GX_EVENT_HIDE 这个优先执行
02. 再执行 GX_EVENT_SHOW 这个,后续只要不是重新开机 就都会保持这个 运行顺序,
0c. 问一下 guix 的架构事件 处理 顺序 是这样的吗 ?
|
|