0

C++ 14我想建立一个机制,以“顺序”方式使用异步API,使用单线程如何使C++异步编程更线性(协程?)

更明确,我想才达到这样的事:

// Transform AsyncOp1 into SyncOp1 
// SyncOp1 returns after AsyncOp1 completes 
// but yields execution to another script 
void SyncOp1() 
{ 
    AsyncOp1([](){ // async op completion handler 
     // TODO: yield control 
    }); 
    // TODO: control returns here after AsyncOp1 completed 
} 

... // similar code for SyncOp2, SyncOp3, SyncOp4,... 

void Script1() 
{ 
    SyncOp1(); 
    SyncOp2(); // SyncOp2 starts only after AsyncOp1 has completed 
    ... 
} 

void Script2() 
{ 
    SyncOp3(); 
    SyncOp4(); // SyncOp4 starts only after AsyncOp3 has completed 
    ... 
} 

int main() 
{ 
    ... 
    Spawn(Script1); 
    Spawn(Script2); // Script1 and Script2 runs in parallel 
    ... 
    // TODO some machinery here :-) 
    ... 
    return 0; 
} 

我的程序应该同时运行多个脚本,每个脚本应该是标准的函数调用(SyncOpX)的序列。因为SyncOpX在的异步函数(即,函数,启动I/O操作,返回,并调用回调的I/O完成时)方面实现的脚本可以并行运行。

当然,很容易找到使用多线程的解决方案(Spawn创建新线程,SynchOpX等待异步调用的结果)。但是我正在寻找一个单线程的解决方案,来代替。

我认为协程可能以某种方式使用。由于目前的标准是C++14,有没有与boost coroutines一个解决方案吗?或者与其他[便携式]机制?

BTW:我使用boost::asio用于异步I/O。

谢谢。

+0

您是否正在考虑使用像[libuv]库(https://github.com/libuv/libuv)或[libevent的(http://libevent.org/)? – j2ko

+0

@ j2ko我已经使用boost :: ASIO的I/O异步事件。我正在寻找的是一种使异步编程更顺序(无线程)的C++机制。 –

回答