我在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注册该回调。