static void async_dispatch(LwqqClient* lc,DISPATCH_FUNC func,void* param) { async_dispatch_data* data = malloc(sizeof(async_dispatch_data)); data->func = func; data->client = lc; data->data = param; lwqq_async_timer_watch(&data->handle, 50, timeout_come, data); }
void lwqq_async_dispatch(DISPATCH_FUNC dsph,CALLBACK_FUNC func , ...) { async_dispatch_data* data = s_malloc0(sizeof(*data)); data->dsph = dsph; data->func = func; va_list args; va_start(args,func); dsph(NULL,&data->data,&args); va_end(args); lwqq_async_timer_watch(&data->timer, 10, timeout_come, data); }
void lwqq_async_dispatch_delay(LwqqCommand cmd,unsigned long timeout) { #ifndef WITHOUT_ASYNC if(timeout==0) timeout=10; async_dispatch_data* data = s_malloc0(sizeof(*data)); data->cmd = cmd; data->timer = lwqq_async_timer_new(); lwqq_async_timer_watch(data->timer, timeout, dispatch_wrap, data); #else vp_do(cmd,NULL); #endif }
void lwqq_async_global_quit() { //no need to destroy thread if(ev_thread_status == THREAD_NOT_CREATED) return ; global_quit_lock = 1; if(ev_thread_status == THREAD_NOW_WAITING){ pthread_cond_signal(&ev_thread_cond); }else if(ev_thread_status == THREAD_NOW_RUNNING){ bomb = lwqq_async_timer_new(); lwqq_async_timer_watch(bomb, 50, ev_bomb, NULL); } ev_thread_status = THREAD_NOT_CREATED; pthread_join(pid,NULL); LWQQ__ASYNC_IMPL(loop_free)(); global_quit_lock = 0; }