我在Windows上,我想在程序终止时调用特定的函数。

例如:

void close_program()
{
    /*do stuff*/
    printf("Goodbye.\n");
}

我尝试了atexit(),但它仅适用于临时退出和常规退出,例如对函数exit()的调用或当main向操作系统返回值时。

我发现HandlerRoutine()似乎是一种解决方案,因为Windows将CTRL_CLOSE_EVENT值信号发送给用户关闭的进程(只是关闭按钮或通过任务管理器结束任务)。问题是我尝试了一段非常基本的代码,并说“未定义对HandlerRoutine的引用”,并且返回了1。

这段代码:
#include <stdio.h>
#include <windows.h>

int main()
{
    while(1)
    {
         if(HandlerRoutine(CTRL_CLOSE_EVENT))
         {
              printf("Program is being terminated...\n");
         }
     }
     return 0;
}

我使用MinGW。

知道是什么问题吗?

根据MSDN,不需要链接。

最佳答案

从您链接的MSDN页面



您需要做的是创建一个回调(PHANDLER_ROUTINE类型),然后使用SetConsoleCtrlHandler注册该回调。

08-16 21:35