Вы можете комбинировать boost :: bind и boost ASIO для создания перекрестных вызовов.
# In Thread 2
boost::asio::io_service service;
boost::asio::io_service::work work (service); // so io service won't stop if there is no work
service.run() # starting work thread
# In Thread 1
service.post (boost::bind (&YourClass::function, &yourClassInstance, parameter1, parameter2))
Поток 2 войдет в цикл и выполнит вашу связанную функцию. Я думаю, что вы также можете вызвать вызовы Boost :: Signals2 в этот цикл.
Но будьте осторожны: если вы выполняете перекрестную сигнализацию, убедитесь, что целевой объект все еще существует при вызове. Вы можете гарантировать это, отбросив все соединения в деструкторе ваших целей (не в деструкторе их базового класса, см. Также Отслеживаемый по сигналам класс )
Мне не очень нравится Boost :: Signals2 из-за очень долгой трассировки стека и времени компиляции ( сообщение в блоге ).