我可以从控制台应用程序中读取退出值吗?

时间:2013-01-13 11:13:52

标签: visual-c++ operating-system windows-xp

我想从我的控制台应用程序中读取退出值,以便在退出之前退出该应用程序的所有相关线程。

enter image description here

3 个答案:

答案 0 :(得分:1)

看看https://stackoverflow.com/questions/298498/c-console-breaking。您需要使用的标准库是csignal

您可以做的是注册强制您的应用关闭(SIGTERM)并在那里执行逻辑的信号,例如退出多个线程。 This post suggests that this should work with windows as well.

您还可以使用atexit注册一个函数,它似乎可以正常退出main()等,不确定关闭终端是否会计为“正常退出”。

答案 1 :(得分:1)

  

Windows上的这项工作尝试了

#include <csignal>
#include <iostream>
#include <ostream>
#include <string>
using namespace std;

namespace
{
    volatile sig_atomic_t exit;

    void signal_handler(int sig)
    {
        signal(sig, signal_handler);
        exit= 1;
    }
}

int main()
{
    signal(SIGINT, signal_handler);
    signal(SIGTERM, signal_handler);
#ifdef SIGBREAK
   signal(SIGBREAK, signal_handler);
#endif


   while (!exit)
   {
       /* do something */
   }
   // Catch signal here
}

答案 2 :(得分:0)

编辑:好的,所以您似乎希望在流程退出后立即收到通知。抱歉,由于“退出值”一词,我误解了您的问题。好吧,如果您通过CreateProcess() API启动此过程,则应该能够在句柄上执行WaitForSingleObject()。此功能将阻止,直到退出该过程。因此,您可以在此调用后停止进程后放置您想要执行的所有代码,并且一切都应该没问题。

如果您确实需要流程的退出代码(return X中的main()):

以编程方式,您可以使用WinAPI中的GetExitCodeProcess()

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683189(v=vs.85).aspx

在shell中,使用%errorlevel%变量。