/** * 実行中スレッドの処理待ち * @param target int:時間待ち(ms), string:トリガ待ち, obj:オブジェクト待ち * @param timeout タイムアウト(省略時は無限に待つ) * @return 待ちがキャンセルされたら true */ SQRESULT Thread::global_wait(HSQUIRRELVM v) { Thread *th = getCurrentThread(v); if (!th) { return ERROR_NOTHREAD(v); } th->_wait(v); return sq_suspendvm(v); }
/** * スクリプトを切り替える * @param func スレッドで実行するファンクション */ SQRESULT Thread::global_exec(HSQUIRRELVM v) { Thread *th = getCurrentThread(v); if (!th) { return ERROR_NOTHREAD(v); } if (sq_gettop(v) <= 1) { return ERROR_INVALIDPARAM(v); } th->_exec(v); return sq_suspendvm(v); }
/** * コマンド実行 * @param func スレッドで実行するファンクション * @return 終了コード */ SQRESULT Thread::global_system(HSQUIRRELVM v) { Thread *th = getCurrentThread(v); if (!th) { return ERROR_NOTHREAD(v); } if (!_fork(v)) { return ERROR_FORK(v); } th->_system(v); sq_pop(v,1); return sq_suspendvm(v); }
static SQInteger program_regist(HSQUIRRELVM v, const struct reader_handle *h, struct flash_memory_driver *t) { SQRESULT r = qr_argument_get(v, 2, &t->programming.address, &t->programming.length); if(SQ_FAILED(r)){ return r; } t->compare = t->programming; t->compare.offset = t->memory.offset & (t->memory.size - 1); if(t->command_change == true){ t->access->flash_config( h, t->c000x, t->c2aaa, t->c5555, t->flash.pagesize, t->flash.retry ); t->command_change = false; } return sq_suspendvm(v); }
static SQInteger base_suspend(HSQUIRRELVM v) { return sq_suspendvm(v); }
static SQInteger ngx_squ_tcp_request_recv(HSQUIRRELVM v) { char *errstr; size_t size; SQRESULT rc; ngx_buf_t *b; ngx_connection_t *c; ngx_squ_thread_t *thr; ngx_squ_tcp_ctx_t *ctx; ngx_tcp_session_t *s; thr = sq_getforeignptr(v); ngx_log_debug0(NGX_LOG_DEBUG_CORE, thr->log, 0, "squ tcp request recv"); ctx = thr->module_ctx; s = ctx->s; c = s->connection; /* TODO: the arguments in squ stack */ rc = sq_getinteger(v, 2, (SQInteger *) &size); b = s->buffer; if (b == NULL || (size_t) (b->end - b->start) < size) { if (b != NULL && (size_t) (b->end - b->start) > c->pool->max) { ngx_pfree(c->pool, b->start); } size = ngx_max(ngx_pagesize, size); b = ngx_create_temp_buf(c->pool, size); if (b == NULL) { errstr = "ngx_create_temp_buf() failed"; goto error; } s->buffer = b; } b->last = b->pos; c->read->handler = ngx_squ_tcp_request_read_handler; c->write->handler = ngx_squ_tcp_request_dummy_handler; ctx->rc = 0; ctx->not_event = 1; ngx_squ_tcp_request_read_handler(c->read); ctx->not_event = 0; if (ctx->rc != NGX_AGAIN) { return ctx->rc; } return sq_suspendvm(v); error: sq_pushbool(v, SQFalse); #if 0 sq_pushstring(, (SQChar *) errstr, -1); #endif return 1; }