Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

69 lines
2.0 KiB

// ======= Copyright (c) 2009, Valve Corporation, All rights reserved. =========
//
// appinstance.h
//
// Purpose: Provide a simple way to enforce that only one instance of an
// application is running on a machine at any one time.
//
// Usage: declare a global object of CSingleAppInstance type, with the unique name
// you want to use wrapped in the TEXT( " " ) macro.
//
// upon entering main you can check the IsUniqueInstance() method to determine if another instance is running
// or you can call the CheckForOtherRunningInstances() method to perform the check AND optinally
// pop up a message box to the user, and/or have the program terminate
//
// Example:
//
// CSingleAppInstance g_ThisAppInstance( TEXT("this_source_app") );
//
// void main(int argc,char **argv)
// {
// if ( g_ThisAppInstance.CheckForOtherRunningInstances() ) return;
//
// .. rest of code ..
//
// Notes: Currently this object only works when IsPlatformWindows() is true
// i.e. no Xbox 360, linux, or Mac yet..
// (feel free to impliment)
//
// ===========================================================================
#ifndef APPINSTANCE_H
#define APPINSTANCE_H
#ifdef _WIN32
#pragma once
#endif
// check if handle is defined rather than inlcude another header
#ifndef HANDLE
typedef void *HANDLE;
#endif
class CSingleAppInstance
{
public:
explicit CSingleAppInstance( tchar* InstanceName, bool exitOnNotUnique = false, bool displayMsgIfNotUnique = false );
~CSingleAppInstance();
bool CheckForOtherRunningInstances( bool exitOnNotUnique = false, bool displayMsgIfNotUnique = true );
static bool CheckForRunningInstance( tchar* InstanceName );
bool IsUniqueInstance() { return m_isUniqueInstance; }
HANDLE GetHandle() { return reinterpret_cast< HANDLE >( (intp) m_hMutex ); }
private:
CSingleAppInstance(); // Hidden for a reason. You must specify the instance name
#ifdef OSX
char m_szLockPath[ MAX_PATH ];
int m_hMutex;
#else
HANDLE m_hMutex;
#endif
bool m_isUniqueInstance;
};
#endif