AddThread("", SW_SHOWNORMAL);
AddThread(_T(""), SW_SHOWNORMAL);
	int Run(LPTSTR lpstrCmdLine, int nCmdShow)	{		MSG msg;		// force message queue to be created		::PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);		AddThread(lpstrCmdLine, nCmdShow);		int nRet = m_dwCount;		DWORD dwRet;		while(m_dwCount > 0)		{			dwRet = ::MsgWaitForMultipleObjects(m_dwCount, m_arrThreadHandles, FALSE, INFINITE, QS_ALLINPUT);			if(dwRet == 0xFFFFFFFF)			{				::MessageBox(NULL, _T("ERROR: Wait for multiple objects failed!!!"), _T("[!output PROJECT_NAME]"), MB_OK);			}			else if(dwRet >= WAIT_OBJECT_0 && dwRet <= (WAIT_OBJECT_0 + m_dwCount - 1))			{				RemoveThread(dwRet - WAIT_OBJECT_0);			}			else if(dwRet == (WAIT_OBJECT_0 + m_dwCount))			{				if(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))				{					if(msg.message == WM_USER)						AddThread("", SW_SHOWNORMAL);				}			}			else			{				::MessageBeep((UINT)-1);			}		}		return nRet;	}