1

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

在此处输入图像描述

4

3 回答 3

1

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

您可以做的是注册强制您的应用程序关闭(SIGTERM)并在那里执行逻辑的信号,例如退出您的多个线程。这篇文章表明这​​也适用于 Windows。

您还可以使用atexit注册一个函数,该函数似乎可以从 main() 等中正常退出,但不确定关闭终端是否算作“正常退出”。

于 2013-01-13T11:21:34.450 回答
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
}
于 2013-01-13T12:21:27.920 回答
0

编辑:好的,看来您希望在进程退出后立即收到通知。抱歉,由于“退出值”一词,我误读了您的问题。好吧,如果您通过CreateProcess()API 启动该过程,您应该可以WaitForSingleObject()在句柄上进行操作。此函数将阻塞,直到进程退出。因此,您可以放置​​在此调用后进程停止后要执行的所有代码,一切都应该没问题。

如果您实际上想要进程的退出代码(return Xin main()):

以编程方式,您可以GetExitCodeProcess()从 WinAPI 使用:

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

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

于 2013-01-13T11:21:41.410 回答