您的位置:首页 > 移动开发

如何让应用程序只有一个实例

2015-03-12 19:57 330 查看
有一种方法,比较简单,用共享内存的形式。

#include <QMessageBox>
#include <windows.h>

const char *fn = "TT's Map";
//If the function succeeds, the return value is an open handle to the specified file mapping object.
//If the function fails, the return value is NULL.
HANDLE fd = OpenFileMapping( FILE_MAP_ALL_ACCESS, FALSE, (LPCWSTR)fn );
if( fd == NULL )
{
create( fn, 16 );
}
else
{
QMessageBox::information( NULL, "Error", "The programming is runing" );
return -1;
}

bool create( const char *fn, int len )
{
if( fn == NULL || len < 0 )
{
return false;
}

char *map = (char *)malloc( len );
if( !map )
{
abort();
}

if( *fn == '/' )
{
++fn;
}

if( len )
{
HANDLE fd = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, len, (LPCWSTR)fn );
}

return true;
}


 

方法2:使用EXE程序的句柄

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QString str = "OMRON"; //OMRON.exe
HWND hwnd = ::FindWindowW( NULL, str.toStdWString().c_str() );
if( hwnd ) //found
{
QMessageBox::warning(0, QObject::tr("Error"), QObject::tr("OMRON.exe is already running."));
QApplication::exit();
return;
}

return KernelExecute::Exec<OMRON_Main_Win>(a, true);
}


 方法3:使用 OpenMutex (为现有的一个已命名互斥体对象创建一个新句柄 )和 CreateMutex

              用 CloseHandle来关闭一个已经打开的Mutex。

           

             


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息