Участник DDS не отменяет регистрацию сразу после прекращения

Я заметил, что даже если я остановлю узел или участника нажатием ctr + C, то есть завершу его... он все равно отображается в консоли администратора или через 2 минуты или около того. Почему это не сразу сработало. Есть ли способ сделать это?

1 ответ

Решение

При завершении работы вашего приложения вы должны очистить сущности DDS, как показано в этом фрагменте кода. В двух словах, он вызывает следующие методы:

DDS_DomainParticipant_delete_contained_entities(participant);
DDS_DomainParticipantFactory_delete_participant(DDS_TheParticipantFactory, participant);

Если вы этого не сделаете, процесс обнаружения DDS через некоторое время сам обнаружит, что участник ушел. Реагирование этого механизма настраивается, как описано в статье базы знаний. Какие параметры влияют на жизнеспособность DomainParticipant?

Теперь нажатие Ctrl + C обычно не выполнит код, описанный выше, потому что сигнал немедленно завершит процесс. Насколько я знаю, единственный способ избежать этого - установить обработчик сигнала, который вызывает эту функцию очистки. Ниже приведен пример кода для установки обработчика сигнала: aspyct / signal.c.

Другие вопросы по тегам