Queue

定时与队列系统;只支持lua。 全部展开

入队出队展开

  • + plannedUsec, from, nameOrFunction, ... = _dequeue(timerUsec, peek)

    从队列取出一项。
    timerUsec为请求微秒数,从1970-1-1 0:0:0本地时区起始。
    如果队列中没有计划微秒数<=timerUsec的项,则不返回结果。
    如果队列中有计划微秒数<=timerUsec的项,则返回对应的计划微秒数、来源、函数、参数,同时从队列里删除这一项,可能不返回参数也可能返回多个。
    peek为true且返回一项时,在队列里保留这一项不删除。
    从队列中删除的项将不会由队列自动调用。

  • + plannedUsec, from, nameOrFunction, ... = _quitqueue(plannedUsec, peek, quiet)

    在队列中删除一项。
    timeUsec为请求微秒数,从1970-1-1 0:0:0本地时区起始。
    如果队列中没有相同计划微秒数的项,则抛出错误,但quiet为true则不返回结果。
    如果队列中有相同计划微秒数的项,则返回对应的计划微秒数、来源、函数、参数,如果peek为nil或false,则同时从队列里删除这一项,可能不返回参数也可能返回多个。
    从队列中删除的项将不会由队列自动调用。

  • + scheduledUsec = _enqueue(timerUsec, from, nameOrFunction, ...)

    在队列中放入一项定时函数调用。
    timerUsec为定时微秒数,从1970-1-1 0:0:0本地时区起始。
    nameOrFunction为全局函数名,或函数引用,...为函数参数,可以省略也可以多个。
    from为调用函数时附加的数据,通常表示来源。
    定时微秒数可能被调整,保证在队列中唯一不重复,返回调整过的计划微秒数。
    当队列中最小的计划微秒数等于或晚于当前本地时刻,调用对应的函数,函数返回结果被忽略。
    函数可以调用<_now>获得计划微秒数,从<_from>获得from参数。
    在没有其他函数执行时,顺序调用函数,不与其他函数重入,计划微秒数最小的最早调用,调用时将从队列中删除此项。

队列执行展开

  • + _from

    当前执行的队列项来源数据。不执行队列项时为nil。

子队列展开

  • + ifstart = _subqueue(start)

    处理子队列,子队列是队列中可以同时删除的一组队列项。
    没有参数时,返回当前是否启动子队列。
    参数为true,启动空子队列,已经启动子队列时,重新启动新的空子队列,原队列项保持有效。
    参数为false,结束空子队列,这组队列项中未调用的全部删除。
    启动子队列后,<_enqueue>入队正常有效,同时标记在子队列中。
    计划微秒数到达时,队列项正常调用。
    结束子队列时,被标记的未调用的项被全部删除。
    通常和数据库事务配合使用,事务开始时调用_subqueue(true),事务回滚时调用_subqueue(false),事务提交时调用_subqueue(true);_subqueue(false)。

队列回调展开

  • + _queue(beforeCall, afterCall, errorCall)

    设定队列项调用时的前置、后置、错误回调。
    当队列调用一项前,调用前置回调。
    当队列调用一项后,调用后置回调。
    当前置、后置、队列项调用抛出错误时,调用错误回调。
    beforeCall(nameOrFunction, ...)
    前置回调,nameOrFunction为队列项的全局函数名或函数引用,...为参数,可能没有也可能多个。
    如果返回非nil且非false,则队列项、后置回调、错误回调都不被调用。
    afterCall(nameOrFunction, ...)
    后置回调,nameOrFunction为队列项的全局函数名或函数引用,...为函数返回结果,可能没有也可能多个。
    本回调返回结果被忽略。
    errorCall(nameOrFunction, error)
    错误回调,nameOrFunction为队列项的全局函数名或函数引用,error为抛出的错误数据,可能为字符串、数字、nil等等。
    可以用debug.traceback获得调用栈字符串,如果本回调返回字符串则打印,返回其他数据则忽略。
    错误回调本身抛出错误时,打印一行类似error handling的字符串。
    通常在前置回调中<_subqueue>(true),后置回调用<_subqueue>(true)及<_subqueue>(false),并提交数据库事务,错误回调中<_subqueue>(false),并回滚数据库事务;数据库事务通常延迟启动。

问题反馈(登录才可以发表哦!)