读书人

C++ 怎么让小弟我变得程序只有一个实例

发布时间: 2012-05-04 12:36:09 作者: rapoo

C++ 如何让我变得程序只有一个实例在运行
int main()
{
? while(1)
? {
? cout<<"hello world";
? }
? return 0;
}


就这么一个简单的程序,如何才能保证只有一个实例在运行呢??
第一个程序运行后,希望不能再运行新的。
用C++


[解决办法]
在你的程序的初始化时,首先去 打开一个互斥(一个你自己创建的互斥),如果互斥不存在,就可以认为是程序第一次运行,如果互斥存在,就认为此次运行时第二个实例,这是不让第二个程序显示,将第一个程序的实例显示为当前窗口,祥见如下的代码:?
BOOL CIHISSERVERApp::InitInstance()?
{?
? ....?
? /*--------------------------------------*/?
? CString mutexname = "oncemutex ";?
? myMutex = ::OpenMutex(MUTEX_ALL_ACCESS,FALSE,mutexname);?
? if(myMutex == NULL )?
? {?
myMutex = ::CreateMutex(NULL,TRUE,mutexname);?
? }?
? else?
? {?
? HWND mainHandle = ::FindWindow(NULL, "IHIS安防报警服务器 ");?
? if ( !mainHandle )?
? {?
? AfxMessageBox( "没有发现窗口 ");?
? }
? SetForegroundWindow( mainHandle );
? ShowWindow(mainHandle,SW_SHOWMAXIMIZED);?

? // 当第一个程序最小话到任务栏时,消除任务栏的图彪
? NOTIFYICONDATA nid;?
? nid.cbSize = sizeof( NOTIFYICONDATA );?
? nid.hWnd = mainHandle;?
? nid.uID = IDR_MAINFRAME;?
? nid.uFlags = 0;
? Shell_NotifyIcon(NIM_DELETE,&nid);
??
? return false;?
}
? /*--------------------------------------*/?
}
这个可以参考下
[解决办法]
建立一个互斥的对象就可以了。
http://blog.csdn.net/w170532934/article/details/6212160
[解决办法]
用写方式打开一个文件就可以了,如果打开不成功则程序退出
[解决办法]
就用互斥吧,系统给你这个东西,就是用来做这个的
[解决办法]
在程序执行开始,判断互斥量对象时候存在,如果存在说明有一个实例在运行。
[解决办法]

C/C++ code
#include "stdafx.h"#include <iostream>#include <windows.h>#include <wtypes.h>int main(){    BOOL bExist = FALSE;    HANDLE hMutex = ::CreateMutex(NULL,TRUE,L"一个唯一的名字");    if (GetLastError() == ERROR_ALREADY_EXISTS)    {        bExist = TRUE;    }    if (hMutex)    {        ::ReleaseMutex(hMutex);    }    if(bExist)    {        return 0;    }    while(1)    {        std::cout<<"hello world";    }    getchar();    return 0;}
[解决办法]
互斥量就可以了呀!程序开始判断是否存在,如果存在就退出

读书人网 >C++

热点推荐