我有一个需要将任务安排到 libuv 事件循环的函数。我的想法是创建一个超时时间为 0 毫秒的计时器。我尝试了以下代码:
void myFunction() {
...
uv_timer_t* timer = new uv_timer_t();
uv_timer_init(uv_default_loop(), timer);
uv_timer_start(timer, [&](uv_timer_t* timer, int status) {
// Scheduled task
}, 0, 0);
}
这种方法效果很好,但问题是,动态分配的计时器永远不会被释放。我尝试在回调中释放计时器,但这导致了分段错误:
void myFunction() {
...
uv_timer_t* timer = new uv_timer_t();
uv_timer_init(uv_default_loop(), timer);
uv_timer_start(timer, [&](uv_timer_t* timer, int status) {
// Scheduled task
delete timer;
}, 0, 0);
}
我也尝试在实际内存释放之前调用uv_timer_stop(timer);
and uv_unref((uv_handle_t*) timer);
,但分段错误仍然存在。