C++ 将一段异步代码插入C++;功能

C++ 将一段异步代码插入C++;功能,c++,asynchronous,C++,Asynchronous,好的,我有一种强烈的感觉,这真的很容易实现,事实上,在其他语言中,这样的事情很容易做到。只是我的C++不是我最强的语言,所以我不能很好的理解这应该怎么做。 我有一个函数,它可以执行一些启动操作,然后需要执行一些I/O操作,并从另一个进程获取数据。当然,我可以通过回调来做到这一点,但我希望避免这样做: startupPt1() { /* stuff */ ioCall(startupPt2()); } startupPt2() { /* rest of stuff */ } 实际上,我想

好的,我有一种强烈的感觉,这真的很容易实现,事实上,在其他语言中,这样的事情很容易做到。只是我的C++不是我最强的语言,所以我不能很好的理解这应该怎么做。 我有一个函数,它可以执行一些启动操作,然后需要执行一些I/O操作,并从另一个进程获取数据。当然,我可以通过回调来做到这一点,但我希望避免这样做:

startupPt1() {
 /* stuff */
 ioCall(startupPt2());
}

startupPt2() {
 /* rest of stuff */
}
实际上,我想避免这种情况,因为在第1部分和第2部分中发生的操作之间没有逻辑上的分离,只是在它们之间存在一些我们希望异步发生的I/O


我目前有一个想法,我会像上面那样使用回调,但除此之外,我不知道我应该怎么做。

好的,我想详细说明一下我的评论,您可能需要这样的东西:

#include<future>

//...

void startup() {
    // part 1
    auto result = std::async([](){
        // IO part
    });
    // part 2 not relying on the result of IO
    // part 2 that uses IO result as result.get()
}
#包括
//...
无效启动(){
//第一部分
自动结果=标准::异步([])(){
//IO部分
});
//第2部分不依赖IO的结果
//第2部分使用IO结果作为result.get()的
}

这将允许操作系统为您安排IO工作。只有在调用了
results.get()

之后,您才能保证它已完成?问“有什么想法吗?”听起来太宽泛了,不能在这里问。这可能会变成一场无休止的讨论,而这正是我们不希望看到的。该网站是关于简洁的常见问题,如问答对。你也可能想读。怎么样?“自然我可以用回调来做这个”你可以在C++中使用回调。看看
std::function
我很困惑,你想使用回调还是不?您声明希望(需要?)使用异步IO,但您的第1部分和第2部分是逻辑连接的吗?你到底想知道什么?我想也许我说错了。我需要的是进程在I/O发生时暂停并放弃处理器控制,但在I/O完成时立即恢复。回调在这里是一种解决方案,但我更希望所有操作都存在于一个函数中。没有一种干净的方法将它们分为
function1()
function2()
。这正是我想要的。我不明白你的意思,但代码片段非常清楚。非常感谢。