查看完整版本: [-- QT控制台程序,如何在关闭控制台时候,获取关闭控制台消息 --]

QTCN开发网 -> Qt基础编程 -> QT控制台程序,如何在关闭控制台时候,获取关闭控制台消息 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

foxgod 2014-06-06 16:43

QT控制台程序,如何在关闭控制台时候,获取关闭控制台消息

QT控制台程序,如何在关闭控制台时候,获取关闭控制台消息;

郑关耳 2014-06-06 20:49
void QCoreApplication::aboutToQuit() [signal]
或通过QCoreApplication::exec返回判断。

只能试试看

dbzhang800 2014-06-07 11:37
这个主要是和系统相关吧,Windows下安装系统钩子,unix下捕捉系统signal?

foxgod 2014-06-16 11:26
dbzhang800:这个主要是和系统相关吧,Windows下安装系统钩子,unix下捕捉系统signal? (2014-06-07 11:37) 

我就是创建了一个控制台程序,在程序里面用process 调用一个exe,但是我关闭这个控制台的程序的时候,无法进入析构函数,所以想获取关系控制台消息,

foxgod 2014-06-16 11:36
郑关耳:void QCoreApplication::aboutToQuit() [signal]
或通过QCoreApplication::exec返回判断。
只能试试看 (2014-06-06 20:49) 

没有作用,点击控制台关闭的时候 ,QCoreApplication::aboutToQuit() 貌似没起作用

dbzhang800 2014-06-17 15:13
foxgod:我就是创建了一个控制台程序,在程序里面用process 调用一个exe,但是我关闭这个控制台的程序的时候,无法进入析构函数,所以想获取关系控制台消息, (2014-06-16 11:26) 

这个,还是没看懂你的问题。

你是想在你的控制台程序内,捕捉“控制台”被杀死的信号?

还是在一个控制台程序内,捕捉通过QProcess启动的另一个"控制台程序"被杀死的信号?

foxgod 2014-06-18 11:28
dbzhang800:这个,还是没看懂你的问题。
你是想在你的控制台程序内,捕捉“控制台”被杀死的信号?
....... (2014-06-17 15:13) 

关闭控制台后,捕获关闭消息,然后执行一段程序里面的代码。就想做这个事情。

foxgod 2014-06-18 11:29
dbzhang800:这个,还是没看懂你的问题。
你是想在你的控制台程序内,捕捉“控制台”被杀死的信号?
....... (2014-06-17 15:13) 

关闭控制台后,捕获控制台被关闭消息,然后执行一段程序里面的代码。就想做这个事情。

dbzhang800 2014-06-18 11:53
foxgod:关闭控制台后,捕获控制台被关闭消息,然后执行一段程序里面的代码。就想做这个事情。 (2014-06-18 11:29) 

还是没看懂你的要求。

比如说,你当前开有一个控制台(Windows下的cmd.exe 或者 Linux下的Bash或Dash)

在该控制台下,你运行一个非常耗时的程序,比如它叫 abcd

然后,在abcd运行过程中,你强制关闭了控制台程序。你是要在此时(在abcd内)捕捉系统发送的控制台被杀死的信号么?

彩阳 2014-06-18 12:48
我才如果要关闭,是不是向console发送^z呢,看看能不能从管道中捕获^z。

foxgod 2014-06-18 13:26
dbzhang800:还是没看懂你的要求。
比如说,你当前开有一个控制台(Windows下的cmd.exe 或者 Linux下的Bash或Dash)
....... (2014-06-18 11:53) 

是的,就是这样

liuyuanan 2014-11-19 19:24
我试过,如下方法可以实现:
#include <QtCore/QCoreApplication>
#include <windows.h>
#include <stdio.h>

BOOL HandlerRoutine(DWORD dwCtrlType)
{
    switch (dwCtrlType)
    {
        case CTRL_C_EVENT:
            printf("ctrl+c\n") ;
            return TRUE;
        case CTRL_CLOSE_EVENT:
            printf("ctrl close\n") ;
            return TRUE;
        case CTRL_BREAK_EVENT:
            printf("CTRL_BREAK_EVENT\n") ;
        case CTRL_LOGOFF_EVENT:
            printf("CTRL_LOGOFF_EVENT\n") ;
        case CTRL_SHUTDOWN_EVENT:
            printf("CTRL_SHUTDOWN_EVENT\n") ;
        default:
            return FALSE;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    SetConsoleCtrlHandler((PHANDLER_ROUTINE)HandlerRoutine,TRUE);

    return a.exec();
}

foxgod 2020-04-28 13:03
郑关耳:void QCoreApplication::aboutToQuit() [signal]
或通过QCoreApplication::exec返回判断。
只能试试看 (2014-06-06 20:49) 

你说的这个函数,在window平台上触发不了这个函数
https://www.doc88.com/p-9109659704596.html   第10页说明

foxgod 2020-04-28 14:05
liuyuanan:我试过,如下方法可以实现:
#include <QtCore/QCoreApplication>
#include <windows.h>
#include <stdio.h>
....... (2014-11-19 19:24) 

试验了,确实可以获取各种关闭,还可以执行别的函数

foxgod 2020-04-28 17:46
liuyuanan:我试过,如下方法可以实现:
#include <QtCore/QCoreApplication>
#include <windows.h>
#include <stdio.h>
....... (2014-11-19 19:24) 

不过如果起了多个子进程,子进程在做大量运算的时候,关闭窗口,这个函数HandlerRoutine()进不来。有什么解决的吗??


查看完整版本: [-- QT控制台程序,如何在关闭控制台时候,获取关闭控制台消息 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled