Если я правильно понимаю намерение, вы хотите запустить обработчик события, когда сигнализируется какая-то переменная условия, в контексте пула потоков asio? Я думаю, что было бы достаточно подождать переменную условия в начале обработчика, и io_service :: post () сам в конце в пуле, что-то вроде этого:
#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
boost::asio::io_service io;
boost::mutex mx;
boost::condition_variable cv;
void handler()
{
boost::unique_lock<boost::mutex> lk(mx);
cv.wait(lk);
std::cout << "handler awakened\n";
io.post(handler);
}
void buzzer()
{
for(;;)
{
boost::this_thread::sleep(boost::posix_time::seconds(1));
boost::lock_guard<boost::mutex> lk(mx);
cv.notify_all();
}
}
int main()
{
io.post(handler);
boost::thread bt(buzzer);
io.run();
}