首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libuv计时器如何使其异步运行

libuv计时器如何使其异步运行
EN

Stack Overflow用户
提问于 2022-11-07 13:51:53
回答 1查看 6关注 0票数 0

我在玩libuv和quickjs(JS引擎)。并利用其核心setTimeout实现了JSRuntime函数。我的JS代码如下所示,这些代码以同步方式运行,而不是按应该以异步方式运行:

代码语言:javascript
复制
console.log("Start");
//this setTimeout will block and , end will be run only once this finish
setTimeout(()=>{
    console.log('Timeout has run');
},5000);

console.log("End");

该程序的输出是:

代码语言:javascript
复制
Start
Timeout has run
*****This one runs after 5 second*******
End

我的Libuv代码就是这样的(不完全是这样,但有点像这样):

代码语言:javascript
复制
int setup_setTimeout(uv_loop_t *loop){
 uv_timer_t* timer_req=(uv_timer_t*)malloc(sizeof(uv_timer_t));//without this I get segmentation error, as in my timerCallback it seems t be lost

 uv_timer_init(loop, timer_req);
 uv_timer_start(timer_req,timerCallback,delay,0);
 uv_run(loop, UV_RUN_DEFAULT);
 std::cout<<"*****This one runs after 5 second*******"<<std::endl;
}

我是一个菜鸟(使用libuv ),因此,如果我遗漏了什么或者运行错误,就会有疑问。因为代码似乎是同步运行的,而不是异步运行的。

EN

回答 1

Stack Overflow用户

发布于 2022-11-07 15:05:15

好吧,所以我找到了解决办法。由于我还没有发布完整的代码,我将尝试解释我如何解决这个问题。

  1. uv_run(loop, UV_RUN_DEFAULT);应该运行在JS脚本evaluation.
  2. The问题之后,如果您调用uv_run,它将开始查找需要处理的事件,它等待的唯一事件就是计时器,因此它将开始运行它。
  3. 首先使用JS引擎评估脚本,该引擎应该调用脚本中的所有事件。
  4. ,最后在计算调用uv_run.

之后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74347666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档