ID: Q153867
4.00 | 3.51
WINDOWS | WINDOWS NT
kbprg kbprb
The information in this article applies to:
- Microsoft Windows NT, version 3.51
- Microsoft Windows 95, version 4.0
Calling timeSetEvent() from an MFC DLL's CWinApp::InitInstance() override never returns.
Whenever a thread is created that will use code in the MFC DLL, an MFC- supplied DLLMain calls the InitInstance() override. The DLLMain code is suspended and does not clean up and exit until its call into InitInstance() returns. Calling timeSetEvent() from InitInstance() leads to an attempted creation of another thread needed by the Multimedia Timer. This additional thread leads to another call into DLLMain that has not yet finished with the earlier InitInstance() call. Therefore, the creation of the Multimedia Timer thread hangs waiting for the completion of the earlier thread.
Do not create a Multimedia Timer in InitInstance() of an MFC DLL. Create the Multimedia Timer in a DLL function that is exported and is therefore called from outside the scope of DLLMain.
This behavior is by design.
For more information, please see the following article in the Microsoft Knowledge Base:
ARTICLE ID: Q142243
TITLE : Cannot Create an MFC Thread During DLL Startup
Additional reference words: 3.51 4.00
KBCategory: kbprg kbprb
KBSubcategory: MMTimer
Keywords : kbmm MMTimer
Version : 4.00 | 3.51
Platform : NT WINDOWS
Last Reviewed: May 13, 1998