我必须处理从两个套接字接收的数据。请考虑以下架构:
struct Session {
Session() { /*...*/ }
void process() {
while (socket->recv()) {/*...*/}
}
private:
Socket* socket;
};
struct SessionWrapper {
SessionWrapper() { /*...*/ }
Command cmd;
Session s{/*..*/};
void process() {
while ((cmd = socket->recv()) != Stop) {
if (cmd == StartSession) {
s.process();
} else if (cms == StopSession) {
// ...
break;
}
}
}
private:
SocketCmd* socket;
};
int main() {
SessionWrapper w{/*...*/};
w.process();
}
问题是当从Start
中的套接字收到SessionWrapper
时,负责处理嵌套Session
中的套接字的循环也会启动。这也意味着现在无法处理来自SessionWrapper的任何StopSession(或其他命令)。
如何通过使用上面的两个不同的类来优雅地解决C ++ 11中的这个问题(请注意,套接字成员是故意私有的,以强制执行封装)并且不使用协同程序和多个线程?
如果有助于获得良好的设计,可以使用boost。
答案 0 :(得分:1)
您只想异步处理Session
。
Boost Asio经常用于C ++中的异步IO。在这种情况下,您也需要一些方法来停止会话(图片中并不完全清楚)。
如果你更好地描述你正在尝试实现的目标(而不是如何)我可能会更具体