C++异步 lambda "recursive"调用
C++ async lambda "recursive" call
无法弄清楚为什么这种看似递归的 readKey 调用不会导致调用堆栈增长:
#include <future>
#include <iostream>
void readKey()
{
std::async(std::launch::async, [](){
if (getchar() != 113) // 'q' to quit
readKey();
});
}
int main(int, char**)
{
readKey();
return 0;
}
谢谢你的解释!
:-)
这不是递归调用,因为您在具有单独堆栈的新线程(std::launch::async
)上调用它。因此,当您在main
中调用readKey
时,它会生成一个新线程,readKey
将被调用,甚至不等待它也会退出。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- 在解压缩可变参数模板时避免"recursive"函数调用,直到运行时条件
- C++异步 lambda "recursive"调用