Я пытаюсь создать асинхронный метод в C ++, используя libev. При необходимости я могу передать метод обратного вызова в качестве аргумента.
Например
test();
printf("After test() method\n");
test()
это асинхронный метод, поэтому следующий printf()
заявление должно быть выполнено до test()
завершает его выполнение.
Я пытался с помощью libev
для этого простого примера:
void testCallback(struct ev_loop *loop, struct ev_io *watcher, int revents)
{
sleep(5);
ev_io_stop(loop, watcher);
}
int test()
{
struct ev_loop *loop = ev_default_loop(0);
ev_io watch;
ev_io_init(&watch, testCallback, 0, EV_READ);
ev_io_start(loop, &watch);
ev_run(loop, 0);
return 0;
}
int main() {
test();
printf("After test() method");
return 0;
}
В этом примере printf
выполняется после того, как цикл этого события остановился. Возможна ли такая функциональность с помощью libev? Я погуглил, но не смог получить пример с такой необходимостью.
Из кода printf должен быть выполнен после остановки цикла. Тест не асинхронный, а testCallback асинхронный. Возможно, вы неправильно поняли логику.
Других решений пока нет …