单纯的 coroutine 没什么用。建议你看看其它语言,比如 python, rust, go 对 corotuine 的使用。在 coroutine 上面还有很多内容要做。比如事件循环和 coroutine 之间的通讯 lock, event, queue 等等。
单纯的 corotuine 有个地方很好用,就是模拟 python 和 javascript 的 yield:
void range(shared_ptr<int> value, coroutine *main)
{
for (int i = 0; i < 100; ++i) {
*value = i;
main->yield();
}
*value = -1;
main->yield();
}
void main()
{
shared_ptr<int> value(new int());
coroutine *generator = new coroutine(range(value, get_current());
do {
generator->yield();
cout << *value;
} while (*value > 0);
}
以上模拟了 python:
for i in range(100):
print(i)
的 c++ 实现。这种 generator 拿来实现 lexer 特别好用。
【 在 ylh1969 (没谱) 的大作中提到: 】
: 本人玩纯C的coroutine,感觉还不错。
: getcontext();之类的
--
修改:hgoldfish FROM 110.85.22.*
FROM 110.85.22.*