/** 销毁帧数控制相关资源 */ 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 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 ); }
void FrameControl_Destroy( FrameControl ctx ) { LCUIMutex_Unlock( &ctx->mutex ); LCUICond_Destroy( &ctx->cond ); LCUIMutex_Destroy( &ctx->mutex ); free( ctx ); }
/** 停用事件模块并进行清理 */ static void LCUI_ExitEvent(void) { System.event.is_running = FALSE; LCUICond_Broadcast( &System.event.cond ); LCUIThread_Join( System.event.tid, NULL ); LCUICond_Destroy( &System.event.cond ); LCUIEventBox_Destroy( System.event.box ); System.event.box = NULL; }
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 StepTimer_Destroy( StepTimer timer ) { LCUICond_Destroy( &timer->cond ); LCUIMutex_Destroy( &timer->mutex ); free( timer ); }