class MGit::DurationRecorder

计时器

Constants

DEFAULT_DURATION_KEY

Public Class Methods

end(duration_key:DEFAULT_DURATION_KEY, use_lock:false) click to toggle source
# File lib/m-git/foundation/duration_recorder.rb, line 60
def self.end(duration_key:DEFAULT_DURATION_KEY, use_lock:false)
  mutex_exec(use_lock) {
    if @@status[duration_key] != IDLE
      current = Time.new.to_f
      @@duration[duration_key] += (current - @@time_stamp[duration_key])
      @@time_stamp.delete(duration_key)
      @@status[duration_key] = IDLE
      return @@duration[duration_key]
    else
      puts '没有需要停止的计时'
    end
  }
end
pause(duration_key:DEFAULT_DURATION_KEY, use_lock:false) click to toggle source
# File lib/m-git/foundation/duration_recorder.rb, line 40
def self.pause(duration_key:DEFAULT_DURATION_KEY, use_lock:false)
  mutex_exec(use_lock) {
    if @@status[duration_key] == RUNNING
      current = Time.new.to_f
      @@duration[duration_key] += (current - @@time_stamp[duration_key])
      @@time_stamp.delete(duration_key)
      @@status[duration_key] = PAUSE
    end
  }
end
resume(duration_key:DEFAULT_DURATION_KEY, use_lock:false) click to toggle source
# File lib/m-git/foundation/duration_recorder.rb, line 51
def self.resume(duration_key:DEFAULT_DURATION_KEY, use_lock:false)
  mutex_exec(use_lock) {
    if @@status[duration_key] == PAUSE
      @@time_stamp[duration_key] = Time.new.to_f
      @@status[duration_key] = RUNNING
    end
  }
end
start(duration_key:DEFAULT_DURATION_KEY, use_lock:false) click to toggle source
# File lib/m-git/foundation/duration_recorder.rb, line 27
def self.start(duration_key:DEFAULT_DURATION_KEY, use_lock:false)
  mutex_exec(use_lock) {
    status = IDLE if @@status[duration_key].nil?
    if status == IDLE
      @@duration[duration_key] = 0.0
      @@time_stamp[duration_key] = Time.new.to_f
      @@status[duration_key] = RUNNING
    else
      puts '需要停止计时后重新开始计时'
    end
  }
end

Private Class Methods

mutex_exec(use_lock) { || ... } click to toggle source

多线程执行保护

@param use_lock [Boolean] 执行是否加锁

# File lib/m-git/foundation/duration_recorder.rb, line 80
def self.mutex_exec(use_lock)
  if use_lock
    @@lock.lock
    yield if block_given?
    @@lock.unlock
  else
    yield if block_given?
  end
end