对于网络编程,尤其是异步进程,我是新手。还可以使用boost-lib重新开始。
我正在实现一个类,以访问一个imap服务器。通常,我可以发送和接收命令和响应。
响应在类内的排队列中排队。我简化了队列中的响应行,以便进一步处理。
现在处理排队响应的最佳方法是什么?
如何实现和集成此回调?
也许有人在这方面有一个简短的例子。
谢谢
发布于 2009-04-18 17:24:27
每次将一个新条目推送到队列中时,
会做一些回调吗?如何实现和集成此回调?
我假设您使用的是单线程同步连接。
做这样的事:
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(); }
}
};Note!
这是单线程实现。如果您想要从其他线程通知您不应该调用some_worker->push_message(msg),则应该使用iosrvice:
service.post(boost::bind(&worker::push_message,some_worker,msg));push_message将从运行ioservice的同一个线程中调用。
https://stackoverflow.com/questions/763429
复制相似问题