我想从我的控制台应用程序中读取退出值,以便在退出之前退出该应用程序的所有相关线程。
3 回答
看看https://stackoverflow.com/questions/298498/c-console-break。您需要使用的标准库是csignal
您可以做的是注册强制您的应用程序关闭(SIGTERM)并在那里执行逻辑的信号,例如退出您的多个线程。这篇文章表明这也适用于 Windows。
您还可以使用atexit注册一个函数,该函数似乎可以从 main() 等中正常退出,但不确定关闭终端是否算作“正常退出”。
在 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
}
编辑:好的,看来您希望在进程退出后立即收到通知。抱歉,由于“退出值”一词,我误读了您的问题。好吧,如果您通过CreateProcess()
API 启动该过程,您应该可以WaitForSingleObject()
在句柄上进行操作。此函数将阻塞,直到进程退出。因此,您可以放置在此调用后进程停止后要执行的所有代码,一切都应该没问题。
如果您实际上想要进程的退出代码(return X
in main()
):
以编程方式,您可以GetExitCodeProcess()
从 WinAPI 使用:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683189(v=vs.85).aspx
在 shell 中,使用%errorlevel%
变量。