【发布时间】:2018-07-29 18:26:26
【问题描述】:
我的 TCP 客户端类具有向服务器发送请求的方法。 在某些情况下,我需要等待响应才能发出另一个请求。 当然我可以写这样的东西:
class MyClass {
private:
SomeResponsMsgType* some_resp_msg_type;
TCP_client tcp_client;
void handle_resp(T resp) {
//handles responses
//initializes some_resp_msg_type and others
}
public:
MyClass() : some_resp_msg_type(nullptr) {}
void init() {
tcp_client.run(this, MyClass::handle_resp);
}
SomeResponsMsgType* make_request(int v) {
Request req(v);
some_resp_msg_type = nullptr;
send_message(req);
int timeout = 10;
while(!some_resp_msg_type && !timeout) {
Sleep(100);
--timeout;
}
SomeResponsMsgType* ret = some_resp_msg_type;
some_resp_msg_type = nullptr;
return ret;
}
};
//and use it like this:
void foo() {
MyClass my_class;
my_class.init();
SomeResponsMsgType* resp = my_class.make_request(1);
if(!resp)
...
AnotherResponsMsgType* resp2 = my_class.make_another_request(resp->some_var);
}
但是这段代码看起来丑陋且不安全。 请帮我举个例子。谢谢。
【问题讨论】:
-
我会使用 std::future 和 std::promise 搜索一些示例
-
为了返回响应,您需要先从服务器获取它。此操作通常会等待。
-
@n.m.取决于“通常”。很可能,
TCP_client被设计为在这里异步运行
标签: c++ multithreading networking boost