3.12. Periodyczne wykonywanie bloku kodu

Problem

Chcemy periodycznie, w równych odstępach czasu, wykonywać pewien fragment kodu, na przykład wywołanie polecenia powłoki.

Rozwiązanie

Należy stworzyć metodę powodującą uruchomienie bloku, a po jego zakończeniu zawieszenie wykonania na odpowiedni okres.

def every_n_seconds(n)
  loop do
    before = Time.now
    yield
    interval = n-(Time.now-before)
    sleep(interval) if interval > 0
  end
end

every_n_seconds(5) do
 puts "Zegar wskazuje #{Time.now.strftime("%X")}... beep!"
end
# Zegar wskazuje 17:37:38... beep!
# Zegar wskazuje 17:37:43... beep!
# Zegar wskazuje 17:37:48... beep!
# Zegar wskazuje 17:37:53... beep!
# Zegar wskazuje 17:37:58... beep!
# Zegar wskazuje 17:38:03... beep!
# ...

Dyskusja

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.