Class: RUtilAnts::GUI::SafeTimersManager

Inherits:
Object
  • Object
show all
Defined in:
lib/rUtilAnts/GUI.rb

Overview

Manager that handles normal Wx::Timer, integrating a mechanism that can kill it and wait until it has been safely killed. Very handy for timers processing data that might be destroyed. To be used with safeTimerAfter and safeTimerEvery.

Instance Method Summary collapse

Constructor Details

#initializeSafeTimersManager

Constructor



317
318
319
320
321
# File 'lib/rUtilAnts/GUI.rb', line 317

def initialize
  # List of registered timers
  # list< Wx::Timer >
  @Timers = []
end

Instance Method Details

#killTimersObject

Kill all registered Timers and wait for their completion. Does not return unless they are stopped.



354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
# File 'lib/rUtilAnts/GUI.rb', line 354

def killTimers
  # Notify each Timer that it has to stop
  @Timers.each do |ioTimer|
    ioTimer.stop
  end
  # Wait for each one to be stopped
  lTimersToStop = []
  # Try first time, to not enter the loop if they were already stopped
  @Timers.each do |iTimer|
    if (iTimer.is_running)
      lTimersToStop << iTimer
    end
  end
  while (!lTimersToStop.empty?)
    lTimersToStop.delete_if do |iTimer|
      next (!iTimer.is_running)
    end
    # Give time to the application to effectively stop its timers
    Wx.get_app.yield
    # Little sleep
    sleep(0.1)
  end
end

#registerTimer(iTimer) ⇒ Object

Register a given timer

Parameters:

  • iTimer (Wx::Timer): The timer to register



327
328
329
# File 'lib/rUtilAnts/GUI.rb', line 327

def registerTimer(iTimer)
  @Timers << iTimer
end

#unregisterTimer(iTimer) ⇒ Object

Unregister a given timer

Parameters:

  • iTimer (Wx::Timer): The timer to unregister

Return:

  • Boolean: Was the Timer registered ?



337
338
339
340
341
342
343
344
345
346
347
348
349
350
# File 'lib/rUtilAnts/GUI.rb', line 337

def unregisterTimer(iTimer)
  rFound = false

  @Timers.delete_if do |iRegisteredTimer|
    if (iRegisteredTimer == iTimer)
      rFound = true
      next true
    else
      next false
    end
  end

  return rFound
end