我正在尝试实现客户端/服务器连接,其中服务器接受来自客户端的多个连接。现在服务器正在接受来自客户端的多个连接,但是我必须同时进行多个连接,并且必须将建立的连接保持在等待状态。
我实现的方式如下:
std::async ([=] { serverConnect(102, "127.0.0.1"); } );
std::async ([=] { serverConnect(102, "127.0.0.1"); } );
int serverConnect(int tcpPort, const string& hostname) {
con = Connection_create();
Connection_connect(con, hostname.c_str(), tcpPort);
return con;
}
以上各行同时创建了两个客户端连接,并返回连接对象,如上所示。
现在,我必须使连接处于等待状态才能进行进一步的操作。
我尝试过以下操作,但不适用于下一个连接
int serverConnect(int tcpPort, const string& hostname) {
con = Connection_create();
Connection_connect(con, hostname.c_str(), tcpPort);
while(con) {
cout << "In waiting State" << endl;
}
}
上面的问题是,它仅适用于一个连接,尽管在服务器断开连接之前循环不会失败,但是不会执行下一个线程。
我必须建立两个连接,建立之后必须将两个连接都保持在等待状态。
帮助我,如何实施?
为每个线程创建一个std :: promise。在每个promise上调用get_future()以获得关联的未来。将这些期货存储在所有线程都可以访问的全局向量中,例如asyncfutures。然后在每个线程中,在该线程的std :: promise上调用set_value,而不是while循环,请执行:
for (auto future : asyncfutures) {
future.wait();
}
然后继续进行线程活动。