How to execute a method in another thread?

Я ищу решение этой проблемы на C или C ++.
edit : Чтобы уточнить. Это в системе Linux. Решения, специфичные для Linux, абсолютно хороши. Кросс-платформенность не вызывает беспокойства.

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

В настоящее время я использую методы оболочки, которые создают структуру с входными и выходными параметрами, вставляют структуру в очереди и либо возвращаются (если «команда» асинхронна), либо ожидают ее выполнения (если «команда» синхронна).

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

Эта реализация работает, но добавление новых методов довольно громоздко: определение оболочки, структуры с параметрами и обработчика. Мне было интересно, есть ли более простые способы кодирования такой модели: метод класса, который выполняется в собственном потоке класса, а не в потоке вызывающего.

edit - своего рода вывод:
Кажется, что не существует де-факто способа реализовать то, что я просил, без дополнительных усилий по кодированию.
Я буду придерживаться того, что придумал, он обеспечивает безопасность типов, сводит к минимуму блокировку, позволяет синхронизировать и асинхронные вызовы, а накладные расходы довольно скромные.
On the other hand it requires a bit of extra coding and the dispatch mechanism may become bloated as the number of methods increases. Registering the dispatch methods on construction, or having the wrappers do that work seem to solve the issue, remove a bit of overhead and also remove some code.

9
задан BЈовић 3 February 2012 в 11:17
поделиться