Kanzi虽然发生了比较多的版本更迭,api也发生了很多变化,
但定时器的头文件一直都在一个地方:
#include "user/include/user/ui/message/kzu_message_dispatcher.h"

先看看头文件里的api说明。

这个头文件里定义了定时器timeout回调函数格式:

/** Message callback prototype. */
typedef kzsError (*KzuMessageHandlerFunction)(struct kanzi::MessageArguments* message, void* userData);

注册和反注册定时器的api说明如下:

/** Registers a timer handler.
* \param messageDispatcher The message dispatcher to use.
* \param interval timeout in milliseconds in case of a one-shot timer, and the interval in case of a repeating timer.
* \param mode KZU_TIMER_MESSAGE_MODE_ONCE, KZU_TIMER_MESSAGE_MODE_REPEAT or KZU_TIMER_MESSAGE_MODE_REPEAT_BATCH. KZU_TIMER_MESSAGE_MODE_REPEAT_BATCH is
* recommended for a repeating timer because it calls handlerFunction only once when the interval has been exceeded several times over.
* \param handlerFunction The function to call when the timer expires.
* \param userData User data pointer passed to handlerFunction.
*/
KANZI_API kzsError kzuMessageDispatcherAddTimerHandler(KzuMessageDispatcher* messageDispatcher, kzUint interval, enum KzuTimerMessageMode mode,
KzuMessageHandlerFunction handlerFunction, void* userData);
/** Unregisters a timer handler. */
KANZI_API kzsError kzuMessageDispatcherRemoveTimerHandler(KzuMessageDispatcher* messageDispatcher, KzuMessageHandlerFunction handlerFunction, const void* userData);

其中参数KzuMessageDispatcher是消息分发器,interval是定时器的间隔时间,KzuTimerMessageMode是定时器的模式(重复或者仅仅一次),KzuMessageHandlerFunction为上面提到的timeout的回调函数。

再来看看具体的使用。

1.首先我们需要获取一个消息分发器(KzuMessageDispatcher)
在Application对象里保存有一个全局的KzuMessageDispatcher。可以通过Application对象的getMessageDispatcher()方法获取:

KzuMessageDispatcher* pDisp = KCoreApplication::GetKzApplication()->getMessageDispatcher();

2.我们需要写一个Timeout的处理函数,按照上面的KzuMessageHandlerFunction定义写一个。

static int OnKzTimeout(struct kanzi::MessageArguments* message, void *userData);

3.注册定时器消息

kzuMessageDispatcherAddTimerHandler(pDisp, , KZU_TIMER_MESSAGE_MODE_REPEAT_BATCH, OnKzTimeout, NULL);

注册之后,在500ms后,OnKzTimeout就会被回调,在里面处理自己的逻辑就可以了。如果需要停止定时器,只需要调用相应的remove api移除即可。

remove的api为 kzuMessageDispatcherRemoveTimerHandler。

(注:该部分适用于kanzi2.8及3.3)

Kanzi编程基础1 - 定时器Timer的更多相关文章

  1. Kanzi编程基础3 - 图片读取与显示

    Kanzi开发的时候会遇到需要从外部读取图片的情况.Kanzi2.8版本和3.3版本读取方法稍有不同,我们先看看2.8版本的api. [2.8版本] 1)首先要从文件中读取一张图片 struct Kz ...

  2. Kanzi编程基础2 - Kanzi节点读取和属性设置

    UI设计师在Kanzi studio把Kanzi的节点做好后,就要编码读取这些节点并根据实际功能去控制刷新它. Kanzi读取节点的api发生过很多次变化,从2.7.2.8到3.0,每次变化都比较大, ...

  3. 《JAVA多线程编程核心技术》 笔记:第五章:定时器Timer

    一.定时器Timer的使用 1.1 方法schedule(TimerTask task, Date time) 是否过期 执行说明 开始执行时间 time>当前时间(未过期) 在time到达时执 ...

  4. Java多线程编程(五)定时器Timer

    一.定时器Timer的使用 在JDK库中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类确实TimerTask类,执行计 ...

  5. [并发编程 - 多线程:信号量、死锁与递归锁、时间Event、定时器Timer、线程队列、GIL锁]

    [并发编程 - 多线程:信号量.死锁与递归锁.时间Event.定时器Timer.线程队列.GIL锁] 信号量 信号量Semaphore:管理一个内置的计数器 每当调用acquire()时内置计数器-1 ...

  6. Java基础_死锁、线程组、定时器Timer

    一.死锁问题: 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不可能正常终止. 比如,线程一需要第一把所,此时锁处于空闲状态,给了 ...

  7. (转)Windows驱动编程基础教程

    版权声明     本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...

  8. Java中定时器Timer致命缺点(附学习方法)

    简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...

  9. PHP框架Swoole的一个定时器Timer特性

    在各种业务型系统中,往往需要服务器在后台扫描相关数据,触发相应的统计.通知等操作. 比如对于一个项目管理系统,需要每天的特定时间内,统计每项任务的执行.到期情况.整个项目的进度等等,根据统计情况,做相 ...

随机推荐

  1. linux 安装配置Nginx

    简介: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国 ...

  2. storm学习

    一 storm 相关术语 . Nimbus storm 集群主节点,负责资源分配和任务调度.(相当于namenode) . supervisor storm集群工作节点,接受Nimbu分配任务,管理w ...

  3. vulcan测试记录

    感觉这个游戏很赞,是六个里面最喜欢的一个了 1.有时候挖坑对于位置要求比较大? 2.感觉难度比较大,尤其是玩到第三关很考验啊(不过从另一个方面来说也是优点?) 3.玩到现在对于怪物吃金子的原理没有很懂 ...

  4. 在html中引用分享的链接

    怎么说呢,其实我自己本身也不是很懂,这些到网上一搜也是有很多详解的,我就是水水的来~~ 附带:smarty 的 tpl 里面 要直接写 javascript 或 style 要用 literal 标签 ...

  5. SourceInsight阅读Python---张子芳

    首先从http://www.sourceinsight.com/public/languages/下载Python的配置文件Python.CLF ,然后对SourceInsight作如下配置: (1) ...

  6. Notepad++自动刷新文本

    现在的日志信息往往都是打印在硬盘上,而不是保存到线上,所以我们常常会使用notepad++来查看硬盘上的文本文件 这时往往会出现两个问题 (1)在notepad++长时间最小化后,再次打开会提示是否下 ...

  7. Coursera台大机器学习课程笔记5 -- Theory of Generalization

    本章思路: 根据之前的总结,如果M很大,那么无论假设泛化能力差的概率多小,都无法忽略,所以问题转化为证明M不大,然后上章将其转化为证明成长函数:mh(N)为多项式级别.直接证明似乎很困难,本章继续利用 ...

  8. apache2.4 windows764 python cgi

    修改conf下的httpd.conf; 1:Listen和ServerName修改为相同的端口号,如8066 2:ScriptAlias就让他留在原位置,"${SRVROOT}/cgi-bi ...

  9. u-boot移植 III

    延续上一篇, 烧录完成后, 串口屁毛都没有了, 运行了代码比较工具, 看看问题在哪. board/100ask24x0/   没有问题, 除了lowlevel_init.S, 不过我没在uboot中用 ...

  10. Supervisor重新加载配置

    Supervisor重新加载配置启动新的进程 liaojie 发布于 1年前,共有 0 条评论 一.添加好配置文件后 二.更新新的配置到supervisord supervisorctl update ...