C++ return 承诺/未来
C++ return a promise / future
我正在尝试使用 promises.
将一些同步 (winsock2) 代码转换为异步代码
void sendRequest() {
sendto(...);
recvfrom(..., buffer);
return buffer;
}
我相信 sendto & recvfrom 是线程阻塞。我将如何返回一个 Promise / Future?
在 Javascript 我会用:
function sendRequest() {
return new Promise((res, rej) => {
// get data
res(myBuffer);
});
}
能否以及如何将其转换为 c++?
auto future = std::async(std::launch::async, sendRequest);
或
auto future = std::async(std::launch::async, []{ ... });
就是你想要的。
但最好切换到异步套接字(使用 asio 或其他)。 asynchronous socket 库,例如 asio,可能会使用特定于平台的选项来避免阻塞调用,因此您不需要在线程池中进行操作。
如果您正在使用 winsock,并且没有迁移到其他平台的计划,您也可以直接使用 windows 异步套接字。
我正在尝试使用 promises.
将一些同步 (winsock2) 代码转换为异步代码void sendRequest() {
sendto(...);
recvfrom(..., buffer);
return buffer;
}
我相信 sendto & recvfrom 是线程阻塞。我将如何返回一个 Promise / Future?
在 Javascript 我会用:
function sendRequest() {
return new Promise((res, rej) => {
// get data
res(myBuffer);
});
}
能否以及如何将其转换为 c++?
auto future = std::async(std::launch::async, sendRequest);
或
auto future = std::async(std::launch::async, []{ ... });
就是你想要的。
但最好切换到异步套接字(使用 asio 或其他)。 asynchronous socket 库,例如 asio,可能会使用特定于平台的选项来避免阻塞调用,因此您不需要在线程池中进行操作。
如果您正在使用 winsock,并且没有迁移到其他平台的计划,您也可以直接使用 windows 异步套接字。