我想从我的控制台应用程序中读取退出值,以便在退出之前退出该应用程序的所有相关线程。
答案 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%
变量。