static void FramesStream_Sort() /* 功能:对动画流进行排序 */ { int i, j, pos, total; LCUI_Frames *temp; LCUI_Frame *p, *q; Queue_Lock(&frames_stream); total = Queue_GetTotal(&frames_stream); /* 使用的是选择排序 */ for(i=0; i<total; ++i) { temp = Queue_Get(&frames_stream, i); if( !temp ) { continue; } if(temp->current > 0) { pos = temp->current-1; } else { pos = 0; } p = Queue_Get(&temp->pic, pos); if( !p ) { continue; } for(j=i+1; j<total; ++j) { temp = Queue_Get(&frames_stream, j); if( !temp ) { continue; } if(temp->current > 0) { pos = temp->current-1; } else { pos = 0; } q = Queue_Get(&temp->pic, pos); if( !q ) { continue; } if( q->current_time < p->current_time ) { Queue_Swap(&frames_stream, j, i); } } } Queue_Unlock(&frames_stream); }
static void LCUI_MainLoopQueue_Sort( void ) { int i, j, total; LCUI_MainLoop *cur_loop, *next_loop; total = Queue_GetTotal( &mainloop_queue ); for(i=0; i<total; ++i) { cur_loop = Queue_Get( &mainloop_queue, i ); if( !cur_loop ) { continue; } for(j=i+1; j<total; ++j) { next_loop = Queue_Get( &mainloop_queue, j ); if( !next_loop ) { continue; } if( next_loop->level > cur_loop->level ) { Queue_Swap( &mainloop_queue, j, i); cur_loop = next_loop; } } } }