Я ищу решение этой проблемы на C или C ++.
edit : Чтобы уточнить.Это в системе Linux.Специфичные для Linux решения абсолютно хороши.Кросс-платформенность не имеет значения.
У меня есть служба, которая работает в своем собственном потоке.Этот сервис является классом с несколькими методами, некоторые из которых должны выполняться в потоке собственной службы, а не в потоке вызывающего.
В настоящее время я использую методы-обертки, которые создают структуру с параметрами ввода и вывода,вставить структуру в очередь и либо вернуть (если «команда» является асинхронной), либо дождаться ее выполнения (если «команда» является синхронной).
На стороне потока служба просыпается, выскакиваетструктура из очереди выясняет, что нужно выполнить, и вызывает соответствующий метод.
Эта реализация работает, но добавление новых методов довольно громоздко: определение оболочки, структуры с параметрами и обработчика.Мне было интересно, есть ли более простые средства кодирования такого рода модели: метод класса, который выполняется в потоке собственного класса, а не в потоке вызывающего.
edit - своего рода вывод:
Кажется, что де-факто не существует способа реализовать то, что я просил, который не требует дополнительных усилий по написанию кода.
Я буду придерживаться того, что я придумал, это гарантируетвведите безопасность, минимизирует блокировку, разрешает синхронизацию и асинхронные вызовы и накладные расходы довольно скромные.
С другой стороны, это требует немного дополнительного кодирования, и механизм диспетчеризации может стать раздутым с увеличением числа методов.Регистрация методов диспетчеризации в процессе сборки или выполнение оболочек для выполнения этой работы, по-видимому, решают проблему, устраняют некоторые накладные расходы, а также удаляют некоторый код.