将控制权交给TCL/Tk GUI的C程序-如何在关闭应用程序时运行代码?
我有一个似乎找不到答案的问题,但我敢打赌,对于以前使用过这种应用程序设置的人来说,这可能是一个非常简单的问题 我正在使用一个用C编写的应用程序,但是调用了一个TCL/TK gui来在屏幕上做很多漂亮的事情。然而,由于TCL/TK在从C运行时的工作方式,一旦您移交了控制权,您就再也无法获得它(即TCL/TK解释器处理应用程序退出,而不是返回到原始的main()函数) 基本上,有一些代码是这样的:将控制权交给TCL/Tk GUI的C程序-如何在关闭应用程序时运行代码?,c,tcl,tk,C,Tcl,Tk,我有一个似乎找不到答案的问题,但我敢打赌,对于以前使用过这种应用程序设置的人来说,这可能是一个非常简单的问题 我正在使用一个用C编写的应用程序,但是调用了一个TCL/TK gui来在屏幕上做很多漂亮的事情。然而,由于TCL/TK在从C运行时的工作方式,一旦您移交了控制权,您就再也无法获得它(即TCL/TK解释器处理应用程序退出,而不是返回到原始的main()函数) 基本上,有一些代码是这样的: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE h
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
}
这引起了一个小问题。我希望能够在程序退出之前销毁数据结构、关闭文件、检查内存泄漏以及执行其他必要的操作。然而,我不能在蒂克曼之后做。我必须找出TCL/TK解释器中关闭时运行的钩子,然后告诉它在退出之前运行我的teardown函数
有人知道如何或在何处执行此操作吗?您可以尝试使用。您向它传递一个void(*f)(void)
函数,该函数将在进程终止时调用。不过,我不确定在Windows下它的工作情况如何
一种更为Tcl/Tk-ish的方法将用于注册出口处理程序:
Tcl_CreateExitHandler在终止应用程序之前,安排由Tcl_Exit调用proc。这为清除操作(如刷新缓冲区和释放全局内存)提供了一个钩子
事实上,有几种方法可以做到这一点:
处理您的案件的首选方法可能是2。Tcl_Exit()的手册页包含您需要的所有详细信息:天哪,我不知道。如果您必须在TCL兴奋地处理之后始终运行“最终块”,那么您可能需要在主程序中分叉并等待。。。然后,“子”进程可以“跳转”到TCL解释器中,“父”进程可以等到它完成后再进行清理。它很凌乱,但我在TCL doco中找不到任何可以让你做你需要的事情的东西。太棒了,这绝对可以做到。谢谢。