示例#1
0
static int tl_manage_dispatch_event(tl_manage_t tm, int maxCount) {
    int rv = 0;
    int count = 0;

    for(; rv == 0
            && maxCount > 0
            && tm->m_action_begin_pos == tm->m_action_end_pos;
        --maxCount)
    {
        struct tl_event_node * node = TAILQ_FIRST(&tm->m_event_queue);

        if (node == TAILQ_END(tm->m_event_queue)
            || node->m_execute_time > tm->m_time_current)
        {
            break;
        }

        TAILQ_REMOVE(&tm->m_event_queue, node, m_next);
        node->m_state = tl_event_node_state_free;

        tl_event_do_dispatch(&node->m_event, rv);

        if (node->m_repeatCount > 0) {
            --node->m_repeatCount;
        }

        if (node->m_repeatCount != 0) {
            node->m_execute_time += node->m_span;
            if (tl_event_node_insert(node) != 0) {
                tl_event_node_free(node);
            }
            
        }
        else {
            tl_event_node_free(node);
        }

        tl_event_queue_clear(&tm->m_event_building_queue);

        ++count;
    }

    return rv == 0 ? count : rv;
}
示例#2
0
int tl_event_queue_clear(struct tl_event_node_queue * queue) {
    int count = 0;

    assert(queue);

    while(!TAILQ_EMPTY(queue)) {
        tl_event_node_free(TAILQ_FIRST(queue));
        ++count;
    }

    return count;
}