У меня есть приложение, которое запускается и обрабатывает элементы в очереди. Элементы обрабатываются с частотой кадров. Это реализовано с использованием класса 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 ¤t_time, const void *act) {
<Process item>
If (more items left)
return 0;
else
return -1;
}
Это вызывает метод handle_timeout (), который затем обрабатывает один элемент из очереди. В то время как в очереди больше элементов, обратный вызов возвращает 0. Когда очередь пуста, обратный вызов возвращает -1, что останавливает цикл реактора.
Проблема в том, что когда метод возвращает -1 run_reactor_event_loop();
все еще блокирует Я хотел бы, чтобы приложение завершило возврат кода состояния и завершило работу. Мне трудно найти хорошую документацию с примерами.
Я что-то пропустил?
Возвращаемое значение не означает, что реактор завершает работу. Чтобы иметь run_reactor_event_loop()
чтобы вернуться ты должен позвонить куда-нибудь ACE_Reactor::instance ()->end_reactor_event_loop ()
см., например, примеры ACE под ACE_wrappers / примеры / ПНГ / Реактор