硬汉嵌入式论坛

 找回密码
 立即注册
查看: 221|回复: 2
收起左侧

[ThreadX全家桶] 请教下,关于guix 的 _cbWindow_event_process 事件处理函数疑惑 ?

[复制链接]

610

主题

3060

回帖

4910

积分

至尊会员

积分
4910
发表于 2023-9-4 09:42:03 | 显示全部楼层 |阅读模式
请教下,关于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 的架构事件 处理 顺序 是这样的吗 ?









回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-9-4 11:47:02 | 显示全部楼层
基本是这样的。
回复

使用道具 举报

610

主题

3060

回帖

4910

积分

至尊会员

积分
4910
 楼主| 发表于 2023-9-4 14:12:52 | 显示全部楼层
eric2013 发表于 2023-9-4 11:47
基本是这样的。




感谢感谢啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 07:08 , Processed in 0.154517 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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