Идеи для уведомления об асинхронных событиях - PullRequest
0 голосов
/ 18 февраля 2011

Я разрабатываю систему, которая требует передачи различных данных из библиотеки очень низкого уровня в приложение C ++ более высокого уровня. Общий процесс - прикладной уровень C ++ делает запрос к низкоуровневой библиотеке, а затем низкоуровневая библиотека ответит асинхронно с результатом. Между приложением C ++ и библиотекой низкого уровня существует много уровней. Например, приложение может иметь метод GetEventDetails, который вызывает несколько других классов перед библиотекой низкого уровня. Э.Г.

App::GetEventDetails
--ClassA::GetEventDetails
---ClassB::GetEventDetails
-----LowLevelLib::GetEventDetails
..
.. at some point in future...
..
LowLevelLib::ReturnEventDetails

Теперь, когда библиотека низкого уровня возвращается с результатом, она не знает о прикладном уровне, чтобы передать результат обратно. Таким образом, один метод может передавать указатель на какой-либо обработчик уведомлений на всем пути от класса App до низкоуровневого кода, но он может добавить много дополнительного кода на каждом уровне, просто чтобы передать этот указатель.

Мне интересно, как другие подходят к подобным проблемам?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Я бы посоветовал вам взглянуть на Boost.Asio . Если вы не собираетесь использовать его, по крайней мере, взглянув на описание его архитектуры, вы получите хорошее представление о том, что делать, и о типичных проблемах, с которыми нужно иметь дело. Но я бы посоветовал вам использовать его, потому что сложно сделать асинхронный ввод-вывод действительно надежным, практичным и быстрым, Boost.Asio делает это довольно хорошо.

0 голосов
/ 18 февраля 2011
Обработчик уведомлений

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

...