Каждый раз, когда новые записи помещаются в очередь, необходимо выполнить обратный вызов?
Как я могу реализовать и интегрировать этот обратный вызов?
Я предполагаю, что вы работаете с однопоточным синхронным соединением.
Сделай что-нибудь подобное:
class worker {
deque<message> messages;
bool is_writing_;
push_message(message msg) {
messages.push_back(msg);
notify();
}
void notify()
{
if(!is_writing_) {
is_writing_=true;
init();
}
}
void init()
{
if(messages.empty()) { is_writing_=false; return; }
messamge msg=messages.pop();
convert_to_vector(v);
async_write(socket,buffer(v),
boost::bind(&worker::complete,this,placehoders::error));
}
void complete(error_code const &e)
{
if(!e) {
init();
}
else { cleanup(); }
}
};
Примечание !!!
Это однопотоковая реализация. Если вы хотите, чтобы уведомить из другой темы, вы должны
не звоните some_worker->push_message(msg)
, вы должны использовать iosrvice:
service.post(boost::bind(&worker::push_message,some_worker,msg));
И push_message
будет вызываться из того же потока, в котором работает ioservice.