一个有趣的问题,几天前在一个 我们的C++论坛 ,如下所示:
null
一种可能的方法,基于 互斥对象 ,几个小时后发布。在建议的模式中,您在MFC应用程序类(即类头)中声明一个互斥对象:
- //MFC应用程序类声明
- 班 CYourAppClass::CWinApp
- {
- …
- 处理Mutexh;
- UINT m U WinMsg U用户界面;
- …
- }
定义MFC应用程序时 InitInstance() 方法,则尝试创建互斥锁-互斥锁的创建将在第一次成功后失败-
- BOOL CYourAppclass::InitInstance()
- {
- mu WinMsgu ui=注册窗口消息(u T( “ONNMESSAGE” ));
- m_Mutex_h=::CreateMutex(NULL,FALSE,STR_VIEWUTILITYMUTEX);
- 如果 ((mu Mutexu h=NULL)&&(GetLastError()=错误(已存在)
- {
- //应用程序未运行两次
- 古德格;
- mu pMainWnd=&dlg;
- INT_PTR nResponse=dlg.DoModal();
- }
- 其他的
- {
- //应用程序正在运行两次向正在运行的应用程序发送消息,
- //应用程序现在将知道第二个实例已启动
- ·SendMessage(HWNDu BROADCAST,mu WinMsgu ui,0,0);
- }
- //接下来将进行更多初始化
- …
- }
关于 其他的 , 解决方案支持者(Bordon) 下面的人说
“这个” 发送消息 “仅当您希望运行的应用程序知道第二个实例已启动时才需要。您向正在运行的应用程序发送一条已注册的windows消息,而正在运行的应用程序将收到此消息并知道第二个实例已启动。你可以在消息处理程序中创建代码,将你的应用程序放到最前面。
很有趣。原来的人把它标记为解决方案,所以它似乎起了作用。你会推荐另一种方法吗?
更新: 请在评论部分查看微软MFC专家Pat Brenner关于这个问题的评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END