]> git.saurik.com Git - wxWidgets.git/blobdiff - docs/latex/wx/snglinst.tex
patch 1306473
[wxWidgets.git] / docs / latex / wx / snglinst.tex
index 4e4f3cce62f1927c7dc9c43680866d8fa6474752..296a9314ee3adc68be89937c0317e627cee4e6b5 100644 (file)
@@ -15,7 +15,7 @@ wxSingleInstanceChecker class allows to check that only a single instance of a
 program is running. To do it, you should create an object of this class. As
 long as this object is alive, calls to 
 \helpref{IsAnotherRunning()}{wxsingleinstancecheckerisanotherrunning} from
 program is running. To do it, you should create an object of this class. As
 long as this object is alive, calls to 
 \helpref{IsAnotherRunning()}{wxsingleinstancecheckerisanotherrunning} from
-other processes will return {\tt TRUE}.
+other processes will return {\tt true}.
 
 As the object should have the life span as big as possible, it makes sense to
 create it either as a global or in \helpref{wxApp::OnInit}{wxapponinit}. For
 
 As the object should have the life span as big as possible, it makes sense to
 create it either as a global or in \helpref{wxApp::OnInit}{wxapponinit}. For
@@ -24,17 +24,18 @@ example:
 \begin{verbatim}
 bool MyApp::OnInit()
 {
 \begin{verbatim}
 bool MyApp::OnInit()
 {
-    m_checker = new wxSingleInstanceChecker(GetAppName());
+    const wxString name = wxString::Format("MyApp-%s", wxGetUserId().c_str());
+    m_checker = new wxSingleInstanceChecker(name);
     if ( m_checker->IsAnotherRunning() )
     {
         wxLogError(_("Another program instance is already running, aborting."));
 
     if ( m_checker->IsAnotherRunning() )
     {
         wxLogError(_("Another program instance is already running, aborting."));
 
-        return FALSE;
+        return false;
     }
 
     ... more initializations ...
 
     }
 
     ... more initializations ...
 
-    return TRUE;
+    return true;
 }
 
 int MyApp::OnExit()
 }
 
 int MyApp::OnExit()
@@ -45,14 +46,21 @@ int MyApp::OnExit()
 }
 \end{verbatim}
 
 }
 \end{verbatim}
 
-This class is implemented for Win32 and Unix platforms supporting {\tt fcntl()}
-system call only.
+Note using \helpref{wxGetUserId()}{wxgetuserid} to construct the name: this
+allows different user to run the application concurrently which is usually the
+intended goal. If you don't use the user name in the wxSingleInstanceChecker
+name, only one user would be able to run the application at a time.
+
+This class is implemented for Win32 and Unix platforms (supporting {\tt fcntl()}
+system call, but almost all of modern Unix systems do) only.
 
 \wxheading{Derived from}
 
 No base class
 
 
 \wxheading{Derived from}
 
 No base class
 
-\wxheading{Data structures}
+\wxheading{Include files}
+
+<wx/snglinst.h>
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
@@ -80,9 +88,10 @@ had been used is an error.
 
 \wxheading{Parameters}
 
 
 \wxheading{Parameters}
 
-\docparam{name}{must be given and be as unique as possible, it is used as the
+\docparam{name}{must be given and be as unique as possible. It is used as the
 mutex name under Win32 and the lock file name under Unix. 
 mutex name under Win32 and the lock file name under Unix. 
-\helpref{GetAppName()}{wxappgetappname} may be a good value for this parameter}
+\helpref{GetAppName()}{wxappgetappname} and \helpref{wxGetUserId()}{wxgetuserid} 
+are commonly used to construct this parameter.}
 
 \docparam{path}{is optional and is ignored under Win32 and used as the directory to
 create the lock file in under Unix (default is 
 
 \docparam{path}{is optional and is ignored under Win32 and used as the directory to
 create the lock file in under Unix (default is 
@@ -90,17 +99,26 @@ create the lock file in under Unix (default is
 
 \wxheading{Return value}
 
 
 \wxheading{Return value}
 
-Returns {\tt FALSE} if initialization failed, it doesn't mean that another
+Returns {\tt false} if initialization failed, it doesn't mean that another
 instance is running - use 
 \helpref{IsAnotherRunning()}{wxsingleinstancecheckerisanotherrunning} to check
 for it.
 
 instance is running - use 
 \helpref{IsAnotherRunning()}{wxsingleinstancecheckerisanotherrunning} to check
 for it.
 
+\wxheading{Note}
+
+One of possible reasons while Create may fail on Unix is that the lock file
+used for checking already exists but was not created by the user.
+Therefore applications shouldn't treat failure of this function as fatal
+condition, because doing so would open them to the possibility of a Denial of
+Service attack. Instead, they should alert the user about the problem and
+offer to continue execution without checking if another instance is running.
+
 \membersection{wxSingleInstanceChecker::IsAnotherRunning}\label{wxsingleinstancecheckerisanotherrunning}
 
 \constfunc{bool}{IsAnotherRunning}{\void}
 
 \membersection{wxSingleInstanceChecker::IsAnotherRunning}\label{wxsingleinstancecheckerisanotherrunning}
 
 \constfunc{bool}{IsAnotherRunning}{\void}
 
-Returns {\tt TRUE} if another copy of this program is already running, {\tt
-FALSE} otherwise.
+Returns {\tt true} if another copy of this program is already running, {\tt
+false} otherwise.
 
 \membersection{wxSingleInstanceChecker::\destruct{wxSingleInstanceChecker}}\label{wxsingleinstancecheckerdtor}
 
 
 \membersection{wxSingleInstanceChecker::\destruct{wxSingleInstanceChecker}}\label{wxsingleinstancecheckerdtor}