C ++兑现承诺/未来

时间:2020-04-19 15:22:46

标签: c++ future

我正在尝试使用promises将一些同步(winsock2)代码转换为异步代码。

void sendRequest() {
    sendto(...);
    recvfrom(..., buffer);
    return buffer;
}

我相信sendtorecvfrom在线程阻塞中。我将如何退还“承诺/未来”?

在Java语言中,我将通过以下方式进行处理:

function sendRequest() {
    return new Promise((res, rej) => {
        // get data
        res(myBuffer);
    });
}

可以并将其转换为c ++吗?

1 个答案:

答案 0 :(得分:2)

auto future = std::async(std::launch::async, sendRequest);

auto future = std::async(std::launch::async, []{ ... });

会是你所追求的。

但是最好切换到异步套接字(使用asio或其他方式)。异步套接字库(例如asio)可以使用特定于平台的选项来避免阻塞调用,因此您无需在线程池中进行操作。

如果您正在使用Winsock,并且没有计划迁移到其他平台,则也可以直接使用Windows异步套接字。