Участник DDS не отменяет регистрацию сразу после прекращения - PullRequest
0 голосов
/ 29 августа 2018

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

1 Ответ

0 голосов
/ 29 августа 2018

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

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

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

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

...