c -在主程序退出时在库中运行清理



我有一个用C写的控制硬件设备的小库。库使用pthreads——它启动一个负责与硬件设备交互的线程。

在某些用例中(但并非总是),这个小库可以从Java应用程序(vía JNI)中使用。当Java应用程序调用System.exit()时,所有线程都被终止,库没有机会确保硬件设备处于"空闲"状态;状态。

库是否可以设置一个在主程序退出或线程终止时调用的清理函数?在概念上类似于atexit(但我知道atexit不应该从共享库中调用)。

我不太了解JNI,但我猜你的共享库只是在某些时候加载,使用dlopen或类似于windows。
gcc和clang有__attribute__((destructor))(和constructor)。
您可以使用它来进行清理和初始化。
在windows上,您可以使用DllMain并检查DLL_PROCESS_ATTACHDLL_PROCESS_DETACH原因。
它应该在调用库的最后一个dlclose之后调用。
不要使用打印输出来调试它,因为此时,stdout可能已经关闭。

__attribute__((destructor)) void myCleanupFn(){
// Cleanup :-)
}

最新更新