void FrameControl_Pause( FrameControl ctx, LCUI_BOOL need_pause ) { if( ctx->state == STATE_RUN && need_pause ) { LCUIMutex_Lock( &ctx->mutex ); ctx->state = STATE_PAUSE; LCUICond_Signal( &ctx->cond ); LCUIMutex_Unlock( &ctx->mutex ); } else if( ctx->state == STATE_PAUSE && !need_pause ) { LCUIMutex_Lock( &ctx->mutex ); ctx->state = STATE_RUN; LCUICond_Signal( &ctx->cond ); LCUIMutex_Unlock( &ctx->mutex ); } }
void StepTimer_Pause( StepTimer timer, LCUI_BOOL need_pause ) { if( timer->state == STATE_RUN && need_pause ) { LCUIMutex_Lock( &timer->mutex ); timer->state = STATE_PAUSE; LCUICond_Signal( &timer->cond ); LCUIMutex_Unlock( &timer->mutex ); } else if( timer->state == STATE_PAUSE && !need_pause ) { LCUIMutex_Lock( &timer->mutex ); timer->state = STATE_RUN; LCUICond_Signal( &timer->cond ); LCUIMutex_Unlock( &timer->mutex ); } }
/** 暂停数据帧的更新 */ void FrameControl_Pause( FrameCtrlCtx ctx, LCUI_BOOL need_pause ) { if( ctx->state == FRAME_CTRL_STATE_RUN && need_pause ) { LCUIMutex_Lock( &ctx->mutex ); ctx->state = FRAME_CTRL_STATE_PAUSE; LCUICond_Signal( &ctx->wait_pause ); LCUIMutex_Unlock( &ctx->mutex ); } else if( ctx->state == FRAME_CTRL_STATE_PAUSE && !need_pause ){ LCUIMutex_Lock( &ctx->mutex ); ctx->state = FRAME_CTRL_STATE_RUN; LCUICond_Signal( &ctx->wait_continue ); LCUIMutex_Unlock( &ctx->mutex ); } }
static void TestWorker_Send( TestWorker worker, const char *data ) { LCUIMutex_Lock( &worker->mutex ); strcpy( worker->data, data ); LCUICond_Signal( &worker->cond ); LCUIMutex_Unlock( &worker->mutex ); }
void LCUIWorker_PostTask( LCUI_Worker worker, LCUI_Task task ) { LCUI_Task newtask; newtask = NEW( LCUI_TaskRec, 1 ); *newtask = *task; LCUIMutex_Lock( &worker->mutex ); LinkedList_Append( &worker->tasks, newtask ); LCUICond_Signal( &worker->cond ); LCUIMutex_Unlock( &worker->mutex ); }
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 ); }