如何在dll关闭之前运行mingw析构函数



我在mingw中有一个相当简单的winsock客户端程序。我使用构造函数/析构函数在主程序运行之前/之后运行setup和teardown代码。作为析构函数代码的一部分,我调用了closesocket()打开网络连接。问题是,如果我异常退出,比如通过control-c退出,就会得到错误:

*** Windows错误:WSAStartup目前无法运行,因为它用于提供网络服务的底层系统当前无法运行不可用。

这个消息有点误导,因为我没有在析构函数中调用WSAStartup (winsock所需的启动调用)。

这告诉我的是,在代码到达析构函数之前,winsock dll被去初始化了。

将析构函数的优先级一直调高(65535)并没有帮助。

我希望有比我更有知识的人知道如何安排这件事。

在MinGW中,您可以使用atexit()调用没有参数的C函数。WSACleanup()就是这样一个函数,因此在WSAStartup之后,您可以使用atexit(WSACleanup)在退出时安排清理。

相关内容

  • 没有找到相关文章

最新更新