Hi,
my WINMM callback tests (cf. bug #3930, comments 37+38) showed that
most MOM_ callbacks were executed in my own thread! The only way I
know how to achieve this is to use an APC as in QueueUserAPC().
However, reading MSDN again, it seems like user-mode APC are never
invoked unless the app uses the Wait*Ex() functions instead of the
regular ones likes WaitForMultipleObjects() or Sleep(). As I can't
expect a random app to use these, I assume that either
- something confused me and I'm on the wrong track, or
- native's winmm uses kernel APC, not user ones, and kernel APC are
invoked even with plain Wait* calls, or
- user APC are executed with plain Sleep/Wait*() (non ~Ex) too.
Does Wine have something like kernel APC?
What other mechanism exist that could allow a player loop inside WINMM
to invoke callbacks in the application's thread context?
BTW, I find it's a good idea from MS to execute callbacks in the
caller's thread. This avoids common pitfalls and nasty bugs.
Is there potential trouble with APC in Wine on 64 bit? MSDN
recommends against posting an APC to a thread in another process.
Thank you for your help,
Jörg Höhle