我正在向某个进程注入一个DLL,该DLL有一个正在运行消息循环的工作线程。
我想正确退出线程,即发布退出消息(PostThreadMessage)并等待它(WaitForSingleObject)。
我可以在哪里等待这个帖子关闭?我无法在DLL_PROCESS_DETACH上执行此操作,因为此时所有线程都已关闭或终止,我不知道该进程何时即将关闭。
我唯一的想法是,有没有办法拦截主线程消息循环并寻找WM_CLOSE \ DESTROY消息?
我很想听到任何其他想法\解决方案。
编辑:
尝试使用带有WH_CALLWNDPROC的SetWindowsHookEx挂钩主线程,但它没有很好地工作,我设法挂钩并接收线程的消息。但是,我没有收到WM_QUIT消息,只有WM_DESTROY和WM_NCDESTROY,它们都与windows相关联。
谢谢,
奥马尔
答案 0 :(得分:4)
该进程不知道线程是否存在,它不关心它是否退出。实际上,如果程序是用C编写的,它会终止它,当它的main()方法退出时,它的运行时库调用TerminateProcess。 Harikiri风格。
如果你外部关心线程,比如在你编写的监控线程的程序中,那么你需要在退出时留下一个痕迹。通过使用您使用的任何进程互操作机制将其传递给您的程序,如命名管道。或者通过设置命名事件。确保您处理harikiri场景,您还需要检查进程句柄是否已发出信号以指示它已终止。
答案 1 :(得分:3)
如果您需要对“About-To-Close”执行某些操作,则需要使用SetWindowsHookEx将主线程挂钩到WH_CALLWNDPROC并查找WM_CLOSE并执行操作/发出关闭线程的信号。