Microsoft KB Archive/153867

{|
 * width="100%"|

PRB: Multimedia Timer Hangs in MFC DLL InitInstance

 * }

Q153867

4.00 | 3.51 WINDOWS | WINDOWS NT kbprg kbprb

-

The information in this article applies to:


 * Microsoft Platform Software Development Kit (SDK), on platform(s):
 * Microsoft Windows versions 3.1, 3.11
 * Microsoft Windows 95
 * Microsoft Windows NT Server versions 3.5, 3.51
 * Microsoft Windows NT Workstation versions 3.5, 3.51

-

SYMPTOMS
Calling timeSetEvent from an MFC DLL's CWinApp::InitInstance override never returns.

CAUSE
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.

RESOLUTION
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.

STATUS
This behavior is by design.