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 异步套接字。