GUI more responsive while experiment is queued and queued experiment can be stopped.
This commit is contained in:
parent
591cf8bdea
commit
3a81893a25
@ -197,6 +197,9 @@ class DamarisGUI:
|
|||||||
# lock file to prevent other DAMARIS to start immediatly
|
# lock file to prevent other DAMARIS to start immediatly
|
||||||
self.lockfile = LockFile() # = os.path.expanduser("~/.damaris.lock")
|
self.lockfile = LockFile() # = os.path.expanduser("~/.damaris.lock")
|
||||||
self.id = None
|
self.id = None
|
||||||
|
|
||||||
|
#to stop queued experiments
|
||||||
|
self.stop_experiment_flag = threading.Event()
|
||||||
|
|
||||||
exp_script = u""
|
exp_script = u""
|
||||||
if exp_script_filename is not None and exp_script_filename != "":
|
if exp_script_filename is not None and exp_script_filename != "":
|
||||||
@ -454,10 +457,13 @@ class DamarisGUI:
|
|||||||
self.log.textbuffer.create_mark( "lastdumped", self.log.textbuffer.get_end_iter( ), left_gravity=True )
|
self.log.textbuffer.create_mark( "lastdumped", self.log.textbuffer.get_end_iter( ), left_gravity=True )
|
||||||
|
|
||||||
loop_run=0
|
loop_run=0
|
||||||
interval = 2
|
#user shorter interval because this blocks user events from the GUI
|
||||||
|
interval = 0.1
|
||||||
|
self.stop_experiment_flag.clear()
|
||||||
|
|
||||||
self.id = self.lockfile.add_experiment()
|
self.id = self.lockfile.add_experiment()
|
||||||
while not self.lockfile.am_i_next():
|
while not self.lockfile.am_i_next() and not self.stop_experiment_flag.isSet():
|
||||||
time.sleep(interval)
|
self.stop_experiment_flag.wait(interval)
|
||||||
while gtk.events_pending():
|
while gtk.events_pending():
|
||||||
gtk.main_iteration(False)
|
gtk.main_iteration(False)
|
||||||
if loop_run > 1:
|
if loop_run > 1:
|
||||||
@ -937,6 +943,7 @@ class DamarisGUI:
|
|||||||
|
|
||||||
def stop_experiment( self, widget, data=None ):
|
def stop_experiment( self, widget, data=None ):
|
||||||
if self.state in [ DamarisGUI.Run_State, DamarisGUI.Pause_State ]:
|
if self.state in [ DamarisGUI.Run_State, DamarisGUI.Pause_State ]:
|
||||||
|
self.stop_experiment_flag.set()
|
||||||
if self.si is None:
|
if self.si is None:
|
||||||
return
|
return
|
||||||
still_running = filter( None, [ self.si.exp_handling, self.si.res_handling, self.si.back_driver ] )
|
still_running = filter( None, [ self.si.exp_handling, self.si.res_handling, self.si.back_driver ] )
|
||||||
|
Loading…
Reference in New Issue
Block a user