Determine if only one instance is running: Difference between revisions
Content added Content deleted
(Added C++ on Windows. I'd be interested in seeing a POSIX solution.) |
m (code revision) |
||
Line 25: | Line 25: | ||
=={{header|Python}}== |
=={{header|Python}}== |
||
===Linux (including cygwin) and Mac OSX Leopard=== |
|||
'''Language Version:''' 2.5 |
'''Language Version:''' 2.5 |
||
Must be run from an application, not the interpreter. |
|||
===without `inspect`=== |
|||
<pre> |
<pre> |
||
import |
import __main__, os |
||
def isOnlyInstance(): |
def isOnlyInstance(): |
||
# Determine if there are more than the current instance of the application |
|||
frame = sys._getframe() |
|||
# running at the current time. If not, return 0. If so, return 1. |
|||
while frame.f_back: |
|||
⚫ | |||
frame = frame.f_back |
|||
__main__.__file__[1:len(__main__.__file__)] + '\' | wc -l) > 1 ))'): |
|||
⚫ | |||
']' + frame.f_code.co_filename[1:len(frame.f_code.co_filename)] + '\' | wc \ |
|||
-l) > 1 ))'): |
|||
return 0 |
|||
else: |
|||
return 1 |
|||
</pre> |
|||
===with `inspect`=== |
|||
<pre> |
|||
import inspect, os |
|||
def isOnlyInstance() |
|||
frame = inspect.currentframe() |
|||
while frame.f_back: |
|||
frame = frame.f_back |
|||
if not os.system('(( $(ps -aef | grep python | grep \'[' + frame.f_code.co_filename[0] + \ |
|||
']' + frame.f_code.co_filename[1:len(frame.f_code.co_filename)] + '\' | wc \ |
|||
-l) > 1 ))'): |
|||
return 0 |
return 0 |
||
else: |
else: |
Revision as of 20:49, 9 December 2007
![Task](http://static.miraheze.org/rosettacodewiki/thumb/b/ba/Rcode-button-task-crushed.png/64px-Rcode-button-task-crushed.png)
You are encouraged to solve this task according to the task description, using any language you may know.
This task is to determine if there is only one instance of an application running.
C++
Microsoft Windows
Operating System: Windows 2000 or later.
This line needs to be near the top of the file (or in stdafx.h, if you use one.)
#include <afx.h>
You need a variable of type HANDLE with the same lifetime as your program. Perhaps as a member of your CWinApp object.
HANDLE mutex;
At the earliest possible point in your program, you need to initialize it and perform your check. "MyApp" should be a string unique to your application. See here for full details.
mutex = CreateMutex( NULL, TRUE, "MyApp" ); if ( GetLastError() == ERROR_ALREADY_EXISTS ) { // There's another instance running. What do you do? }
Finally, near the end of your program, you need to close the mutex.
CloseHandle( mutex );
Python
Linux (including cygwin) and Mac OSX Leopard
Language Version: 2.5
Must be run from an application, not the interpreter.
import __main__, os def isOnlyInstance(): # Determine if there are more than the current instance of the application # running at the current time. If not, return 0. If so, return 1. if not os.system('(( $(ps -ef | grep \'[' + __main__.__file__[0] + ']' + \ __main__.__file__[1:len(__main__.__file__)] + '\' | wc -l) > 1 ))'): return 0 else: return 1
Visual Basic
Language Version: 6
Dim onlyInstance as Boolean onlyInstance = not App.PrevInstance