我正在尝试使用promises将一些同步(winsock2)代码转换为异步代码。
void sendRequest() {
sendto(...);
recvfrom(..., buffer);
return buffer;
}
我相信sendto和recvfrom在线程阻塞中。我将如何退还“承诺/未来”?
在Java语言中,我将通过以下方式进行处理:
function sendRequest() {
return new Promise((res, rej) => {
// get data
res(myBuffer);
});
}
可以并将其转换为c ++吗?
答案 0 :(得分:2)
auto future = std::async(std::launch::async, sendRequest);
或
auto future = std::async(std::launch::async, []{ ... });
会是你所追求的。
但是最好切换到异步套接字(使用asio或其他方式)。异步套接字库(例如asio)可以使用特定于平台的选项来避免阻塞调用,因此您无需在线程池中进行操作。
如果您正在使用Winsock,并且没有计划迁移到其他平台,则也可以直接使用Windows异步套接字。