Как вернуться из & quot; ACE_Reactor :: instance () — & gt; run_reactor_event_loop (); & quot; заблокировать навсегда?

У меня есть приложение, которое запускается и обрабатывает элементы в очереди. Элементы обрабатываются с частотой кадров. Это реализовано с использованием класса ACE_Reactor.

Часть кода, которая начинает это:

void start() {
ACE_Reactor::instance()->schedule_timer( this, NULL, ACE_Time_Value(0,1000), ACE_Time_Value(0,1000) );
ACE_Reactor::instance()->run_reactor_event_loop();
}

handle_timeout (const ACE_Time_Value &current_time, const void *act) {
<Process item>

If (more items left)
return 0;
else
return -1;
}

Это вызывает метод handle_timeout (), который затем обрабатывает один элемент из очереди. В то время как в очереди больше элементов, обратный вызов возвращает 0. Когда очередь пуста, обратный вызов возвращает -1, что останавливает цикл реактора.

Проблема в том, что когда метод возвращает -1 run_reactor_event_loop(); все еще блокирует Я хотел бы, чтобы приложение завершило возврат кода состояния и завершило работу. Мне трудно найти хорошую документацию с примерами.

Я что-то пропустил?

0

Решение

Возвращаемое значение не означает, что реактор завершает работу. Чтобы иметь run_reactor_event_loop() чтобы вернуться ты должен позвонить куда-нибудь ACE_Reactor::instance ()->end_reactor_event_loop ()см., например, примеры ACE под ACE_wrappers / примеры / ПНГ / Реактор

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector