如果在代码中使用了std :: cin,则std :: atexit()不起作用

时间:2019-07-16 07:27:32

标签: c++ windows

几天前是我开始使用C ++,所以可能是一个业余而愚蠢的问题:

在我的应用程序关闭时,将调用std :: atexit()中提供的函数。很高兴。但是,一旦我使用std :: cin从用户端获取输入(至少一次),就不会调用该函数。

这是一个控制台应用程序。

编辑:我想在程序等待输入时仍然执行我的void Close()函数。但是,只有在程序不等待输入的情况下,我才能实现该目标。我认为这可能不是正确的方法,我的程序启动了Apache Web服务器和Mysql数据库服务器(使用ShellExecuteEx()),当我的应用程序停止时,我也将其停止。

我也尝试过std :: set_terminate()。

// This is super good, everything works as expected

#include <iostream>
#include <string>

void Close()
{
    // Code I need to run when program closes.
}

int main()
{
    std::atexit(Close);

    // Some code...

    return 0;
}

但是,如果我等待用户输入,则不会调用'void Close()'。

#include <iostream>
#include <string>

void Close()
{
    // Code I need to run when program closes.
}

int main()
{
    std::atexit(Close);

    std::string example;
    std::cin >> example;

    return 0;
}

1 个答案:

答案 0 :(得分:0)

  

但是,如果我等待用户输入,则不会调用void Close()

的确如此,但这是需要的。在等待用户输入时,您的程序尚未关闭。一旦用户确实提供了将被解析为example字符串对象的输入,则将在调用Close()时为-和 this 。因此,在执行时,键入一些字符,按回车键,将触发Close()