libuv イベント ループにタスクをスケジュールする必要がある関数があります。私のアイデアは、タイムアウトが 0ms のタイマーを作成することでした。次のコードを試しました:
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);
たが、セグメンテーション違反はまだ残っています。