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

Visual c++ 我可以从控制台应用程序读取退出值吗?,visual-c++,operating-system,windows-xp,Visual C++,Operating System,Windows Xp,我想从控制台应用程序读取exit值,以便在退出之前退出该应用程序的所有相关线程 看一看。您需要使用的标准库是 你能做的就是注册信号,这些信号会迫使你的应用程序关闭(SIGTERM)并在那里执行逻辑,比如退出多个线程 您还可以注册一个函数,该函数似乎可以捕获main()等的正常退出,但不确定关闭终端是否会被视为“正常退出”。编辑:Ok,因此您似乎希望在进程退出后立即收到通知。对不起,由于“退出值”这个术语,我误读了你的问题。如果您通过CreateProcess()API启动流程,您应该能够在句柄上

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

看一看。您需要使用的标准库是

你能做的就是注册信号,这些信号会迫使你的应用程序关闭(SIGTERM)并在那里执行逻辑,比如退出多个线程

您还可以注册一个函数,该函数似乎可以捕获main()等的正常退出,但不确定关闭终端是否会被视为“正常退出”。

编辑:Ok,因此您似乎希望在进程退出后立即收到通知。对不起,由于“退出值”这个术语,我误读了你的问题。如果您通过
CreateProcess()
API启动流程,您应该能够在句柄上执行
WaitForSingleObject()
。此函数将一直阻止,直到进程退出。因此,您可以在这个调用之后,在进程停止之后,放置您想要执行的所有代码,所有这些代码都应该是正常的

如果您确实需要进程的退出代码(
main()
)中的返回X):

通过编程,您可以使用WinAPI中的
GetExitCodeProcess()

在shell中,使用
%errorlevel%
变量

这是我在Windows上的工作尝试一下吧

#包括
#包括
#包括
#包括
使用名称空间std;
名称空间
{
易失性sig_原子出口;
无效信号处理器(int sig)
{
信号(sig,信号处理器);
退出=1;
}
}
int main()
{
信号(SIGINT,信号处理器);
信号(SIGTERM,信号处理器);
#ifdef SIGBREAK
信号(信号断路器、信号处理器);
#恩迪夫
当(!退出)
{
/*做点什么*/
}
//这里有信号吗
}

你可以一直写日志文件。这是OS问题,不是C或C++问题。你能用你正在使用的任何操作系统来标记这个问题吗?你可以回顾这篇文章[如何处理ctrl-break信号][1][1]:我想捕捉退出信号,这样我就可以在退出之前关闭所有相关程序。@abdo.eng2006210 yes,为SIGTERM添加一个信号处理程序就可以了。@GeniusIDS lol你刚才复制粘贴了我链接到的帖子吗?@KarthikT lol没有,我只是用代码解释了我之前发布的链接[link]()
#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
}