• Kanzi编程基础1


    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, 500, KZU_TIMER_MESSAGE_MODE_REPEAT_BATCH, OnKzTimeout, NULL);

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

    remove的api为 kzuMessageDispatcherRemoveTimerHandler。

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

  • 相关阅读:
    LightOJ 1313 Protect the Mines (Convex Hull && Minimum Circle)
    Hangzhou Invitation Day1
    hdu 2907 Diamond Dealer (Convex Hull)
    LightOJ 1239 Convex Fence (Convex Hull)
    POJ 2164 && LA 3218 Find the Border (Geometry, PSLG 平面直线图)
    hdu 1140 War on Weather (3DGeometry)
    uva 10347 Medians (Simple Geometry)
    String匹配函数
    动态读取外部文件
    转_读取外部数据
  • 原文地址:https://www.cnblogs.com/littlemeng/p/5908168.html
Copyright © 2020-2023  润新知