📄 subject_59768.htm
字号:
<p>
序号:59768 发表者:robslove 发表日期:2003-11-10 13:02:48
<br>主题:如何让自己的程序只执行一次
<br>内容:这是我翻以前帖子的内容<BR>在InitInstance()中加入<BR>if(AlreadyRunning())<BR> {<BR> AfxMessageBox(IDS_ALREADY_RUNNING,MB_OK|MB_ICONWARNING);<BR> return(FALSE);<BR> }<BR><BR><BR><BR><BR><BR>BOOL C***App::AlreadyRunning()<BR>{<BR> BOOL bFound = FALSE;<BR><BR> // Try to create a mutex with the app's name<BR> HANDLE hMutexOneInstance = ::CreateMutex(NULL,TRUE,_T(AfxGetAppName()));<BR><BR> // Already there...means that we are already running an instance<BR> if(::GetLastError() == ERROR_ALREADY_EXISTS)<BR> bFound = TRUE;<BR><BR> // Release the mutex<BR> if(hMutexOneInstance)<BR> ::ReleaseMutex(hMutexOneInstance);<BR><BR> return(bFound);<BR>} <BR>程序虽然会弹出提示已经运行<BR>但仍会重复运行<BR>不知道怎么回事
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:樂日華 回复日期:2003-11-10 13:08:45
<br>内容:InitInstance()<BR>{<BR> AfxEnableControlContainer();<BR> <BR> //保證程序只能夠同時運行一個 <BR> HANDLE m_hMutex=CreateMutex(NULL,TRUE, m_pszAppName); <BR> if(GetLastError()==ERROR_ALREADY_EXISTS) { return FALSE; }<BR><BR><BR><BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:iwill 回复日期:2003-11-10 13:11:04
<br>内容:看清楚了 是App类的InitInstance 不是dialog的OnInitDialog,如果非要在后者中实现,应该是SendMessage(WM_CLOSE);
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-11-10 14:34:19
<br>内容: HANDLE hObject = CreateMutex(NULL,FALSE,"TEST");<BR> if(GetLastError() == ERROR_ALREADY_EXISTS)<BR> {<BR> CloseHandle(hObject);<BR> AfxMessageBox("程序已经运行!");<BR> return FALSE;<BR> }
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-11-10 14:37:04
<br>内容:另一种方法:<BR><BR>在CMyApp.cpp文件开头加上以下几行:<BR>#pragma data_seg("Shared") <BR>int volatile g_lAppInstance =0;<BR>#pragma data_seg()<BR><BR>我们来看一下上面的内容:<BR>第一句 #pragma data_seg("Shared") 创建一个称为Shared 的新节。<BR>第二句 int volatile g_lAppInstance =0 将 g_lAppInstance 放入Shared节中。注意此时只有将g_lAppInstance初始化,编译器才会将其放入Shared节中,否则,将放入Shared以外的节。(实际上Visual C++ 编译器提供了一个allocate 说明符,使我们可以将数据放到任何节中。)<BR>第三句指示编译器Shared 节结束。<BR><BR>#pragma comment(linker,"/section:Shared,RWS")<BR><BR>这一句,我们使编译链接器知道我们的Shared节具有读,写,共享的属性。这是我们实现互斥运行的关键。这样我们就可以在应用程序之间的多个实例之间共享g_lAppInstance 变量。<BR>在InitInstance() 函数中加入:<BR>if(++g_lAppInstance>1)<BR>{<BR> AfxMessageBox("程序已经运行!");<BR> return FALSE;<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:无情阁东雪 回复日期:2003-11-10 16:15:17
<br>内容:呵呵,你翻出的帖子不就是我写的吗!<BR>按照我说的做是绝对没错的,记住,是在APP类中加,别搞错了!!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -