Сигнализирует выполняющимся диагностическим процедурам о преждевременной отмене диалога для экономии ресурсов.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 654e2e9e4acaПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Сигнализирует выполняющимся диагностическим процедурам о преждевременной отмене диалога для экономии ресурсов.
Класс ara::diag::CancellationHandler информирует диагностические приложения о преждевременной отмене текущей обработки в Diagnostic Management [SWS_DM_00608]. Созданный DM-Core объект позволяет процессору сервиса опрашивать статус отмены через IsCanceled() или получать уведомления по обратному вызову через SetNotifier() для незамедлительного прекращения обработки сервиса [SWS_DM_00615]. Однажды установленный статус отмены является безотзывным, а доступ к экземпляру должен защищаться на стороне приложения, поскольку интерфейс не является потокобезопасным.
Контекст
Класс ara::diag::CancellationHandler функционирует внутри модуля diag как разделяемый индикатор состояния, показывающий, должна ли текущая диагностическая обработка быть преждевременно прервана [SWS_DM_00608]. В AUTOSAR Adaptive Platform класс выступает посредником между серверным экземпляром Diagnostic Management (DM) и исполняющей логикой приложения, например при обработке специфичных для производителя сервисов UDS (AUTOSAR_AP_SWS_Diagnostics §7.3.2.8.24 «Custom Diagnostic Services», [SWS_DM_00502]).
Если активный диагностический диалог аннулируется внешними событиями или требованиями протокола, экземпляр диагностического сервера обязан как можно быстрее прекратить запущенную активность [SWS_DM_00278]. Через CancellationHandler эта отмена сигнализируется процессору сервиса, благодаря чему ресурсоемкие вычисления прерываются, а недопустимая отправка диагностических ответов предотвращается до начала их передачи [SWS_DM_00279].
Жизненный цикл
Инстанцирование ara::diag::CancellationHandler находится под исключительным контролем диагностического фреймворка: конструктор по умолчанию явно удален для приложений (delete), поэтому экземпляры могут создаваться исключительно DM-Core [SWS_DM_00609]. Чтобы гарантировать однозначную привязку состояния, класс специфицирован как некопируемый одиночный экземпляр; конструктор копирования [SWS_DM_00611] и оператор присваивания с копированием [SWS_DM_00613] удалены.
Напротив, класс поддерживает семантику перемещения: конструктор перемещения [SWS_DM_00610] и оператор присваивания с перемещением [SWS_DM_00612] объявлены как стандартные реализации как noexcept. Предположительно, это позволяет фреймворку эффективно передавать владение экземпляром в последующие контексты выполнения. Вопрос (открытый)
С точки зрения состояния экземпляр демонстрирует монотонное поведение. Непосредственно после инициализации IsCanceled() сигнализирует значение false[SWS_DM_00984]. Как только соответствующий диагностический диалог аннулируется, состояние меняется на true. Этот статус отмены необратимо сохраняется до уничтожения экземпляра [SWS_DM_00984].
Регистрация или опрос: приложение с помощью SetNotifier() регистрирует функцию уведомления типа ara::diag::CancellationHandler::CancellationHandlerSetNotifier ([SWS_DM_02075]), которая вызывается при наступлении отмены [SWS_DM_00615]. В качестве альтернативы или дополнения оно циклически опрашивает IsCanceled()[SWS_DM_00614].
Сигнализация: если DM отменяет диалог, статус в обработчике меняется на true[SWS_DM_00984] и срабатывает сохраненный нотификатор [SWS_DM_00615].
Прерывание: приложение незамедлительно прекращает начатую работу [SWS_DM_00278]. Если ответ еще не был передан, DM подавляет отправку [SWS_DM_00279].
Завершение: после окончания обработки объект обработчика уничтожается вместе с контекстом сервиса.
Интерфейс ara::diag::CancellationHandler отличается безошибочным дизайном. Все методы, такие как IsCanceled()[SWS_DM_00614], SetNotifier()[SWS_DM_00615], а также операции перемещения [SWS_DM_00610][SWS_DM_00612], являются безопасными относительно исключений (noexcept) и не возвращают кодов ошибок.
Если выполняется многократный вызов SetNotifier(), это не приводит к ошибке: последующие регистрации полностью перезаписывают ранее установленный обратный вызов [SWS_DM_00615], [SWS_DM_01348].
Особого внимания требует потокобезопасность: все функции-члены (IsCanceled, SetNotifier) и тип обратного вызова явно объявлены как непотокобезопасные [SWS_DM_00614], [SWS_DM_00615], [SWS_DM_02075]. Если опросы статуса или регистрации нотификатора выполняются через границы потоков, приложение должно использовать внешние механизмы защиты. Кроме того, обратный вызов, по-видимому, вызывается синхронно в инициирующем потоке DM, поэтому функции нотификатора на стороне приложения должны оставаться неблокирующими. Вопрос Q-26c43c035d4f18a3 (открытый)
Данное руководство было сгенерировано системой ИИ на основе спецификации AUTOSAR Adaptive R25-11.
Registering a notifier function which is called if the diagnostic service execution is cancelled in DM. A consecutive call of this method will overwrite the previous registered notifier.
Registering a notifier function which is called if the diagnostic service execution is cancelled in DM. A consecutive call of this method will overwrite the previous registered notifier.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: d99693aaeb20ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Метод ara::diag::CancellationHandler::SetNotifier ([SWS_DM_00615]) из заголовочного файла ara/diag/cancellation_handler.h регистрирует функцию обратного вызова типа CancellationHandlerSetNotifier. Эта функция вызывается Diagnostic Management (DM), как только выполнение диагностического сервиса отменяется. Сама регистрация выполняется синхронно и не имеет возвращаемого значения (void).
Обработка ошибок и семантика выполнения
Вызов специфицирован как noexcept и считается безопасным относительно исключений (exception safe) ([SWS_DM_00615]). Специфические коды ошибок, возвраты ошибок или сообщения DET/DEM для этого интерфейса не предусмотрены.
Параллелизм и ограничения
В отношении потокобезопасности метод классифицирован как not thread-safe ([SWS_DM_00615]). Поэтому экземпляр CancellationHandler не должен модифицироваться параллельно без защиты. При многократном последовательном вызове SetNotifier на одном и том же экземпляре DM перезаписывает ранее зарегистрированный нотификатор ([SWS_DM_01348], SWS Diagnostics с. 193). Кроме того, функции обратного вызова целесообразно не выполнять блокирующих операций, чтобы не задерживать внутреннюю процедуру отмены в DM. Вопрос Q-94d2cb76c17c4fa4 (открытый)
Взаимодействие
Экземпляр CancellationHandler передаётся DM обработчикам сервисов и рутин в качестве параметра, например, при обобщённой обработке сервисов ([SWS_DM_00618]), доступе к данным ([SWS_DM_00636]) или рутинах ([SWS_DM_00554]). Если диагностическая сессия прерывается, DM по возможности отменяет текущие внутренние действия ([SWS_DM_00278]) и сбрасывает передачу ответа ([SWS_DM_00279]). Регистрация через SetNotifier наряду с синхронным опросом статуса отмены через IsCanceled ([SWS_DM_00984]) предоставляет путь реагирования, управляемый событиями.
Этот текст был создан ИИ; все технические утверждения подтверждены полезной нагрузкой.
Руководство разработчика реализации в подготовке (сложность I2)
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал