| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1036 人关注过本帖
标题:研究一下这段代码,eid是怎么获取参数的?
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用kfusr在2015-7-17 16:16:51的发言:

void app_Key_Long_timer(int eid)
{
      
    app_t *curapp = GET_CURR_APP();
    static int key_time_2S = 0;
   
    if (eid == TIMER_UNREGISTER) {
        key_time_2S = 0;
        return;
    }
    key_time_2S++;
    if (key_time_2S == 2) {
        app_timer_unregister(TIMER_1HZ, app_Key_Long_timer);
        key_long_flag = 1;        
        key_time_2S = 0;   
        }
}


回复 2楼 hjx1120
app_timer_unregister(TIMER_1HZ, app_Key_Long_timer);
这里没有给eid参数啊


这里的 app_timer_unregister是另外一个函数了   也不是递归调用  和 app_Key_Long_timer(int eid)有毛关系

DO IT YOURSELF !
2015-07-22 15:03
kfusr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-7-17
收藏
得分:0 
......
switch (msg) {
       case HMSG_USER_RECORD_BUTTON:
            if(AutoLcdOffFlag)
            {
                app_set_backlight(1);
                app_timer_unregister(TIMER_CHECK, app_lcd_power_timer);
            }
            else
                curapp->on_message(msg);                       
            break;   
       ......

}

看到了吗?
app_timer_unregister(TIMER_CHECK, app_lcd_power_timer)函数调用了吗?
app_lcd_power_timer函数前面有函数原型;void app_lcd_power_timer(int ied)
正常情况下app_lcd_power_timer必须带参数才行的,上面代码就没看清参数。这里很困惑。
2015-07-23 10:59
kfusr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-7-17
收藏
得分:0 
void app_Key_Long_timer(int eid)和void app_lcd_power_timer(int ied)的调用都是用int app_timer_unregister(int id, timer_handler hdlr),或int app_timer_register(int id, timer_handler hdlr)的;比如:

app_timer_unregister(TIMER_CHECK, app_Key_Long_timer);
app_timer_unregister(TIMER_CHECK, app_lcd_power_timer);
app_timer_register(TIMER_CHECK, app_Key_Long_timer);
app_timer_register(TIMER_CHECK, app_lcd_power_timer);
2015-07-23 11:08
rolimi
Rank: 4
等 级:业余侠客
威 望:1
帖 子:43
专家分:232
注 册:2015-6-10
收藏
得分:2 
app_timer_unregister(TIMER_CHECK, app_lcd_power_timer);

app_timer_unregister里面并没有调用app_lcd_power_timer,它只是用这个函数指针来取消定时器,没调用当然不用传参数

呆呆的逗比程序猿
2015-07-23 15:24
实际应用
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:89
专家分:341
注 册:2015-5-30
收藏
得分:2 
hdlr(TIMER_UNREGISTER);
就是
app_Key_Long_timer(TIMER_UNREGISTER);
app_lcd_power_timer(TIMER_UNREGISTER);
2015-07-23 21:38
kfusr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-7-17
收藏
得分:0 
回复 14楼 rolimi
首先,非常感谢各位的热心帮忙!
没错,我再次查找了原函数另一处的声明定义:typedef void (*timer_handler)(int eid);
但是eid没有给值,eid如何获取呢,如何进入下面代码呢?我用debug跟踪,程序确实会有满足条件的时候。还有点困惑,多谢指教!
if (eid == TIMER_UNREGISTER) {
        time_30S = 3;
        time_120S = 12;
        time_300S = 30;
        return;
    }
2015-07-24 09:31
rolimi
Rank: 4
等 级:业余侠客
威 望:1
帖 子:43
专家分:232
注 册:2015-6-10
收藏
得分:0 
回复 16楼 kfusr
我看错了,app_timer_unregister里确实有调用到,它在删掉时调用了一次hdlr(TIMER_UNREGISTER);

呆呆的逗比程序猿
2015-07-24 19:59
快速回复:研究一下这段代码,eid是怎么获取参数的?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016038 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved