0
我必須處理從兩個套接字接收的數據。考慮以下方案:如何處理套接字
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();
}
的問題是,當從插座收到SessionWrapper
Start
,負責在嵌套Session
處理插座的循環開始了。這也意味着現在將無法處理來自SessionWrapper的任何StopSession(或其他命令)。
如何在C++ 11中通過使用兩個不同的類(請注意套接字成員故意專用於強制封裝)並且不使用協程和多線程來優雅地解決此問題?
如果可以幫助獲得良好的設計,可以使用boost。
爲什麼指針?兩個類是否共享相同的套接字? – DanielKO
@DanielKO:套接字是不同類型的,它們不共享相同的套接字。他們是指針,但他們不可能,我不認爲這很重要(這就是爲什麼我把/*...*/放在構造函數中,假設他們是以某種方式創建的) – Martin
你爲什麼要調用'process( )'遞歸?這沒有意義。在收到開始會話命令之前,即使有SessionWrapper類的實例也沒有意義。這只是一個代碼結構問題。 – EJP