daemon app in win32
Ben Hutchings
ben.hutchings at roundpoint.com
Tue Mar 27 18:59:32 EST 2001
whisper at oz.net (Dave LeBlanc) writes:
> On Mon, 26 Mar 2001 19:02:27 +0200, Michael Bauer <Mike_B at T-Online.de>
> wrote:
>
> >Steve Purcell wrote:
> >
> >> Michael Bauer wrote:
> >>> i am writing a daemon application that runs both under windows and unix.
> >>> Since i am not very experienced in win32 - programming, i really would
> >>> appreciate some hints how to register my app in win32 that i can do some
> >>> cleanup-functions when windows is shut down.
> >>>
> >>> At the moment it is just a standard console application that simply gets
> >>> killed when windows shuts down. The app does not have/need a GUI, it
> >>> should just run in the background.
> >>
> >>
> >> If you're using NT, take a look at the win32service API. I think it
> >> provides hooks like SvcStop that Windows will call for you (if you ask it
> >> nicely).
> >
> >Hmm, seems like this is only available under NT. Is there a more general
> >way to accomplish this task independently of the underlying Windows-version?
> >
> >But maybe i should just get a life and write different wrappers for Win95,
> >Win98, WinME, Win200, WinNT... :-(
You should only need two. The Apache web server code for Windows
might be instructive.
> >still hoping... Mike
> AFAIK, Every Windows app gets sent a WM message when it's about to be
> terminated.
If it has a GUI, then its top-level window will be sent WM_CLOSE.
Console applications can register to receive such notifications in the
same way they receive control-C notifications under *some* versions of
Windows.
> Most apps just let this fall through to the default
> message processor (which you have to do anyway) without doiing
> anything to clean up. You can add a message handler for this such that
> the app can gracefully (make out it's will?) prepare to end it all.
The DefWindowProc (default message handler) responds to WM_CLOSE by
calling DestroyWindow() (which runs synchronously). The message
handler for a top-level window should respond to this by calling
PostQuitMessage(), which posts a WM_QUIT message to the calling
thread's message queue. (The message handler for a dialog should do
something else again.) Application frameworks like MFC should do
this stuff for you.
> Just make sure that in the end, it passes the message on to the
> default message handler so that windows can do it's own cleanup of
> your app.
Actually, what's supposed to happen is that your main message loop
calls GetMessage(), which finds a WM_QUIT message and returns 0; the
loop then exits and your cleanup code runs on the way out.
--
Any opinions expressed are my own and not necessarily those of Roundpoint.
More information about the Python-list
mailing list