File: wx.SingleInstanceChecker.txt

package info (click to toggle)
wxpython4.0 4.0.4%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 211,112 kB
  • sloc: cpp: 888,355; python: 223,130; makefile: 52,087; ansic: 45,780; sh: 3,012; xml: 1,534; perl: 264
file content (245 lines) | stat: -rw-r--r-- 7,566 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
.. wxPython Phoenix documentation

   This file was generated by Phoenix's sphinx generator and associated
   tools, do not edit by hand.

   Copyright: (c) 2011-2018 by Total Control Software
   License:   wxWindows License

.. include:: headings.inc



.. _wx.SingleInstanceChecker:

==========================================================================================================================================
|phoenix_title|  **wx.SingleInstanceChecker**
==========================================================================================================================================

:ref:`wx.SingleInstanceChecker`  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 :meth:`wx.SingleInstanceChecker.IsAnotherRunning`   from other processes will return ``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 :meth:`wx.App.OnInit` . For example: 

::

        def OnInit(self):

            self.name = "SingleApp-%s" % wx.GetUserId()
            self.instance = wx.SingleInstanceChecker(self.name)

            if self.instance.IsAnotherRunning():
                wx.MessageBox("Another instance is running", "ERROR")
                return False

            frame = SingleAppFrame(None, "SingleApp")
            frame.Show()
            return True



Note that by default :meth:`wx.SingleInstanceChecker.CreateDefault`   is used to create the checker meaning that it will be initialized differently for different users and thus will allow different users to run the application concurrently which is usually the required behaviour. However if only a single instance of a program should be running system-wide, you need to call :meth:`~wx.SingleInstanceChecker.Create`  with a custom name which does `not`  include :ref:`wx.GetUserId`. 

This class is implemented for Win32 and Unix platforms (supporting  ``fcntl()``   system call, but almost all of modern Unix systems do) only. 









|

|class_hierarchy| Class Hierarchy
=================================

.. raw:: html

   <div id="toggleBlock" onclick="return toggleVisibility(this)" class="closed" style="cursor:pointer;">
   <img id="toggleBlock-trigger" src="_static/images/closed.png"/>
   Inheritance diagram for class <strong>SingleInstanceChecker</strong>:
   </div>
   <div id="toggleBlock-summary" style="display:block;"></div>
   <div id="toggleBlock-content" style="display:none;">
   <p class="graphviz">
   <center><img src="_static/images/inheritance/wx.SingleInstanceChecker_inheritance.png" alt="Inheritance diagram of SingleInstanceChecker" usemap="#dummy" class="inheritance"/></center>
   </div>
   <script type="text/javascript">toggleVisibilityOnLoad(document.getElementById('toggleBlock'))</script>
   <map id="dummy" name="dummy"> <area shape="rect" id="node1" href="wx.SingleInstanceChecker.html" title="wx.SingleInstanceChecker" alt="" coords="5,5,192,35"/> </map> 
   </p>

|


|method_summary| Methods Summary
================================

================================================================================ ================================================================================
:meth:`~wx.SingleInstanceChecker.__init__`                                       Default constructor.
:meth:`~wx.SingleInstanceChecker.Create`                                         Initialize the object if it had been created using the default constructor.
:meth:`~wx.SingleInstanceChecker.CreateDefault`                                  Calls :meth:`~SingleInstanceChecker.Create`   with default name.
:meth:`~wx.SingleInstanceChecker.IsAnotherRunning`                               Returns ``True`` if another copy of this program is already running and ``False`` otherwise.
================================================================================ ================================================================================


|


|api| Class API
===============


.. class:: wx.SingleInstanceChecker(object)

   **Possible constructors**::

       SingleInstanceChecker()
       
       SingleInstanceChecker(name, path=EmptyString)
       
   
   SingleInstanceChecker class allows to check that only a single
   instance of a program is running.



   .. method:: __init__(self, *args, **kw)



      |overload| Overloaded Implementations:

      **~~~**

      
      **__init__** `(self)`
      
      Default constructor.                  
      
      You may call :meth:`Create`   after using it or directly call :meth:`IsAnotherRunning`   in which case :meth:`CreateDefault`   will be implicitly used.                   
      
      
      
      
      **~~~**

      
      **__init__** `(self, name, path=EmptyString)`
      
      Constructor calling :meth:`Create` .                  
      
      This constructor does exactly the same thing as :meth:`Create`   but doesn't allow to check for errors.                  
      
      
      :param `name`: 
      :type `name`: string
      :param `path`: 
      :type `path`: string
      
      
      
      
      
      
      **~~~**






   .. method:: Create(self, name, path=EmptyString)

      Initialize the object if it had been created using the default constructor.                  

      Note that you can't call :meth:`Create`   more than once, so calling it if the non default constructor had been used is an error. 




      :param `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. :meth:`wx.App.GetAppName`   and :ref:`wx.GetUserId`  are commonly used to construct this parameter.   
      :type `name`: string
      :param `path`: The path is optional and is ignored under Win32 and used as the directory to create the lock file in under Unix (default is :ref:`wx.GetHomeDir`).  
      :type `path`: string








      :rtype: `bool`



                  



      :returns: 

         Returns ``False`` if initialization failed, it doesn't mean that another instance is running :meth:`IsAnotherRunning`   to check for it.  







      .. note:: 

         One of possible reasons while :meth:`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.   








   .. method:: CreateDefault(self)

      Calls :meth:`Create`   with default name.                  

      This method simply calls :meth:`Create`   with a string composed of :meth:`wx.App.GetAppName`   and :ref:`wx.GetUserId`. 

      Because this method uses :meth:`wx.App.GetAppName` , it may only be called after the global application was constructed. 

                

      :rtype: `bool`







      .. versionadded:: 2.9.1 
     








   .. method:: IsAnotherRunning(self)

      Returns ``True`` if another copy of this program is already running and ``False`` otherwise.                  

      Notice that if the object was created using the default constructor :meth:`Create`   hadn't been called before this method, it will call :meth:`CreateDefault`   automatically.                  

      :rtype: `bool`