Re: Monitor Thread In DLL

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: James Brown (remove_james_dot_brown7_at_virgin_dot_net)
Date: 12/09/04


Date: Thu, 9 Dec 2004 21:25:13 -0000

Can you not take advantage of the DLL_PROCESS_DETACH
message that your DLL will receive just before it is unloaded??
then signal an event that your monitor thread is listening on,
finally wait for the thread to exit using WaitForSingleObject..
then exit DllMain..

-- 
James
---
www.catch22.net
Free win32 software, sourcecode and tutorials
-----
Please de-spam my email address before replying.
"Matt" <none@none.com> wrote in message 
news:OJDLoFj3EHA.3624@TK2MSFTNGP14.phx.gbl...
>
> Hi,
>
> I am creating a monitor thread in a WIN32 DLL.  I'd like the monitor 
> thread to stay around for the life of the DLL and then exit cleanly before 
> the DLL is detached.
>
> My problem is, I do not know how to "safely" do this.  I have tried using 
> the atexit() function inside the DLL to trigger the monitor thread 
> termination, but it is already too late by then.  It looks like the C++ 
> run time calls:
>
> atexit() for the EXE
> ExitProcess() -> Kills all active worker threads using TerminateThread().
> atexit() for each DLL during the detach phase.
>
> I really want to avoid having my worker thread killed by 
> TerminateThread(). I could get around this by requiring the user to call 
> some type of cleanup function, but I would like to avoid doing that as 
> well (because some users may forget to call it).
>
> CleanupStuff(), waits for thread shutdown.  Cleans up the thread nicely.
> atexit() for the EXE
> ExitProcess() -> Kills all active worker threads using TerminateThread().
> atexit() for each DLL during the detach phase.
>
> I could try implicitly loading the atexit() function for the executable 
> and add in my cleanup code there, but that seems very much like a hack to 
> me.
>
> LoadLib for the atexit() func for the EXE.  Call it.
> atexit() for the EXE.  Calls my cleanup function and waits for thread 
> shutdown.  Cleans up the thread nicely.
> ExitProcess() -> Kills all active worker threads using TerminateThread().
> atexit() for each DLL during the detach phase.
>
> Any suggestions would be appreciated.
>
> Thanks,
>
> Matt
>
>
>
>
>
> 


Relevant Pages

  • Monitor Thread In DLL
    ... I am creating a monitor thread in a WIN32 DLL. ... atexit() for the EXE ... I really want to avoid having my worker thread killed by TerminateThread(). ...
    (microsoft.public.win32.programmer.kernel)
  • Re: Monitor Thread In DLL
    ... > ExitProcess() kill the worker threads using TerminateThreadbefore ... > Runtime calls atexit() for the DLL during the detach phase. ... >> message that your DLL will receive just before it is unloaded?? ... >> then signal an event that your monitor thread is listening on, ...
    (microsoft.public.win32.programmer.kernel)
  • Re: Monitor Thread In DLL
    ... I would go with a cleanup function. ... if you want to be able to unload the DLL ... > atexit() for the EXE ...
    (microsoft.public.win32.programmer.kernel)
  • Re: Monitor Thread In DLL
    ... Runtime calls atexitfor the EXE. ... Runtime calls atexit() for the DLL during the detach phase. ... > finally wait for the thread to exit using WaitForSingleObject.. ...
    (microsoft.public.win32.programmer.kernel)
  • Re: Cancelling a python thread (revisited...)
    ... You should call TerminateThread only if you know ... exactly what the target thread is doing, and you control all of the code ... the kernel32 state for the thread's process could be ... DLL, the state of the DLL could be destroyed, affecting other users of ...
    (comp.lang.python)