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; }
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; }