void StatusMessageBox(const char* Text, const char* Caption, unsigned int Style, unsigned int time) { GMsgBox* box = new GMsgBox; if(box) { box->displays = 1; box->type = Style; box->body = Text; box->title = Caption; if(box->Create()) { GMessage msg; unsigned int start = CURRENT_TIME; while(1) { if(box->GetMessage(msg, 100)) { if(box->DefWinProc(msg)) break; } else { if(ms_since(start) > time) break; } } } delete box; } else static_StatusMessageBox(Text, Caption, Style, time); }
static int alsa_run(cubeb * ctx) { int r; int timeout; int i; char dummy; cubeb_stream * stm; enum stream_state state; pthread_mutex_lock(&ctx->mutex); if (ctx->rebuild) { rebuild(ctx); } /* Wake up at least once per second for the watchdog. */ timeout = 1000; for (i = 0; i < CUBEB_STREAM_MAX; ++i) { stm = ctx->streams[i]; if (stm && stm->state == DRAINING) { r = ms_until(&stm->drain_timeout); if (r >= 0 && timeout > r) { timeout = r; } } } pthread_mutex_unlock(&ctx->mutex); r = poll(ctx->fds, ctx->nfds, timeout); pthread_mutex_lock(&ctx->mutex); if (r > 0) { if (ctx->fds[0].revents & POLLIN) { read(ctx->control_fd_read, &dummy, 1); if (ctx->shutdown) { pthread_mutex_unlock(&ctx->mutex); return -1; } } for (i = 0; i < CUBEB_STREAM_MAX; ++i) { stm = ctx->streams[i]; if (stm && stm->state == RUNNING && stm->fds && any_revents(stm->fds, stm->nfds)) { alsa_set_stream_state(stm, PROCESSING); pthread_mutex_unlock(&ctx->mutex); state = alsa_refill_stream(stm); pthread_mutex_lock(&ctx->mutex); alsa_set_stream_state(stm, state); } } } else if (r == 0) { for (i = 0; i < CUBEB_STREAM_MAX; ++i) { stm = ctx->streams[i]; if (stm) { if (stm->state == DRAINING && ms_since(&stm->drain_timeout) >= 0) { alsa_set_stream_state(stm, INACTIVE); stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); } else if (stm->state == RUNNING && ms_since(&stm->last_activity) > CUBEB_WATCHDOG_MS) { alsa_set_stream_state(stm, ERROR); stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); } } } } pthread_mutex_unlock(&ctx->mutex); return 0; }