我有一个问题,我似乎无法找到答案,但我愿意打赌,对于之前使用过此类应用程序设置的人来说,这可能是一个非常简单的问题。
我正在使用一个用C语言编写的应用程序,但是调用一个TCL / TK gui来在屏幕上做很多漂亮的东西。但是,由于TCL / TK在从C运行时的工作方式,一旦你移交了控制 - 你永远不会得到它(即TCL / TK解释器处理应用程序退出,而不是返回到原始main())功能)。
基本上,有一些像这样的代码:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow){
Tk_Main(1,argv,Tcl_AppInit); // Tcl_AppInit is a function that runs at the start
// All code after this point will never, ever run
return 0; // This return never actually occurs
}
这会引起一些问题。我希望能够在程序退出之前销毁数据结构,关闭文件,检查内存泄漏,并执行其他必要的操作。但是,在Tk_Main之后我不能这样做。我必须找出关闭时运行的TCL / TK解释器中的钩子,然后告诉它在退出之前运行我的拆卸功能。
有人知道如何或在何处这样做?
答案 0 :(得分:1)
您可以尝试使用atexit()
。您传递一个void (*f)(void)
函数,以便在进程终止时调用。我不确定它在Windows下的效果如何。
更多Tcl / Tk-ish方法是使用Tcl_CreateExitHandler
注册退出处理程序:
Tcl_CreateExitHandler 安排 Tcl_Exit 在终止应用程序之前调用 proc 。这为清理操作提供了一个钩子,例如刷新缓冲区和释放全局内存。
答案 1 :(得分:1)
实际上有几种方法可以做到:
处理案例的首选方法可能是2. Tcl_Exit()的联机帮助页面包含您应该需要的所有详细信息:http://www.tcl.tk/man/tcl8.5/TclLib/Exit.htm