/* 销毁程序占用的资源 */ static void LCUIApp_Destroy(void) { if( LinkedList_GetTotal(&MainApp.loop_list) > 0 ) { /* 等待其它线程上的主循环都完全退出 */ LCUICond_Wait( &MainApp.loop_list_empty ); } /* 开始清理 */ LCUICond_Destroy( &MainApp.loop_list_empty ); LCUICond_Destroy( &MainApp.loop_cond ); LCUIMutex_Destroy( &MainApp.loop_mutex ); LCUIMutex_Destroy( &MainApp.loop_changed ); LCUIMutex_Destroy( &MainApp.task_run_mutex ); LCUIMutex_Destroy( &MainApp.task_list_mutex ); LinkedList_Destroy( &MainApp.loop_list ); }
LCUI_API void Graph_Free( LCUI_Graph *pic ) { LCUI_Graph *p; if( pic && pic->quote ) { pic->src = NULL; pic->quote = FALSE; return; } p = Graph_GetQuote( pic ); if( !Graph_IsValid(p)) { return; } LCUIMutex_Lock( &p->mutex ); free( p->rgba[0] ); free( p->rgba[1] ); free( p->rgba[2] ); if( p->color_type == COLOR_TYPE_RGBA ) { free( p->rgba[3] ); } free( p->rgba ); p->rgba = NULL; p->w = 0; p->h = 0; LCUIMutex_Unlock( &p->mutex ); LCUIMutex_Destroy( &pic->mutex ); }
void FrameControl_Destroy( FrameControl ctx ) { LCUIMutex_Unlock( &ctx->mutex ); LCUICond_Destroy( &ctx->cond ); LCUIMutex_Destroy( &ctx->mutex ); free( ctx ); }
/** 销毁帧数控制相关资源 */ void FrameControl_Destroy( FrameCtrlCtx ctx ) { LCUIMutex_Unlock( &ctx->mutex ); LCUICond_Destroy( &ctx->wait_continue ); LCUICond_Destroy( &ctx->wait_pause ); LCUIMutex_Destroy( &ctx->mutex ); free( ctx ); }
static void TestWorker_Destroy( TestWorker worker ) { LCUIMutex_Lock( &worker->mutex ); worker->active = FALSE; LCUICond_Signal( &worker->cond ); LCUIMutex_Unlock( &worker->mutex ); LCUIThread_Join( worker->thread, NULL ); LCUIMutex_Destroy( &worker->mutex ); LCUICond_Destroy( &worker->cond ); }
void LCUIWorker_Destroy( LCUI_Worker worker ) { if( worker->thread != 0 ) { LOG( "[worker] worker %u is stopping...\n", worker->thread ); LCUIMutex_Lock( &worker->mutex ); worker->active = FALSE; LCUICond_Signal( &worker->cond ); LCUIMutex_Unlock( &worker->mutex ); LCUIThread_Join( worker->thread, NULL ); LOG( "[worker] worker %u has stopped\n", worker->thread ); worker->thread = 0; } LCUIMutex_Destroy( &worker->mutex ); LCUICond_Destroy( &worker->cond ); LinkedList_Clear( &worker->tasks, OnDeleteTask ); free( worker ); }
/** 停用键盘输入模块 */ void LCUIModule_Keyboard_End( void ) { LinkedList_Destroy( &key_state_record ); LCUIMutex_Destroy( &record_mutex ); }
void LCUI_FreeKeyboard(void) { RBTree_Destroy(&self.state_tree); LCUIMutex_Destroy(&self.mutex); }
/** 停用键盘输入模块 */ int LCUI_ExitKeyboard( void ) { LinkedList_Destroy( &key_state_record ); LCUIMutex_Destroy( &record_mutex ); return 0; }
void StepTimer_Destroy( StepTimer timer ) { LCUICond_Destroy( &timer->cond ); LCUIMutex_Destroy( &timer->mutex ); free( timer ); }