C++异步 lambda "recursive"调用

C++ async lambda "recursive" call

本文关键字:recursive 调用 lambda 异步 C++      更新时间:2023-10-16

无法弄清楚为什么这种看似递归的 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将被调用,甚至不等待它也会退出。