/** 停用事件模块并进行清理 */ 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 ); }