我正在开发一个C++中的DLL,它需要通过(先前建立的)TCP/IP连接使用write()调用来写入一些数据。确切地说,当进程停止时,DLL应该发送一个'进程12345终止于2007-09-27 15:30:42,我的值是131'的消息。如何在流程的最终阶段执行网络IO?
不幸的是,我所知道的用于检测过程结束的所有方式显然都为时过晚,任何网络调用都无法成功。特别是,我尝试以下方法和返回的write()电话-1在任何情况下:
- 呼叫从一个全局对象的析构函数write()。
- 从使用atexit()注册的回调函数调用write()。
- 从DllMain调用write()(如果
reason
参数是DLL_PROCESS_DETACH
)。我知道这不是一件安全的事情,但我有点绝望。 :-)
我知道,一个DLL无法检测任何进程关闭(它可能已被长期的进程终止之前卸载),但由于该DLL需要发送关机数据取决于在DLL中的其他代码,这是可以接受的。我基本上在寻找可以安全执行网络IO的最新时刻。
有谁知道如何做到这一点?
使用看门狗进程是个好主意。我会考虑一下。不幸的是,您的链接指向的页面只是讨论外部进程的进程管理(而不是当前进程)。 – 2010-09-27 13:35:53