# Ruby Tk: how to make something happen periodically?

**URL:** <https://www.ruby-forum.com/t/ruby-tk-how-to-make-something-happen-periodically/85129>\
**Category:** Ruby\
**Created:** [February 10, 2007, 8:30am UTC](https://www.ruby-forum.com/t/ruby-tk-how-to-make-something-happen-periodically/85129 "2007-02-10T08:30:45Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3da27b/32.png) [@S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/u/S_P_Arif_Sahari_Wib)\
**Post date:** [February 10, 2007, 8:30am UTC](https://www.ruby-forum.com/t/ruby-tk-how-to-make-something-happen-periodically/85129/1 "2007-02-10T08:30:45Z")

</div>

Hi!

In Ruby Tk, how to make something happen periodically, while the user  
does not touch the button, menu, etc.?

Thanks!

---

<div class="post-metadata">

**Author:** ![S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3da27b/32.png) [@S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/u/S_P_Arif_Sahari_Wib)\
**Post date:** [February 10, 2007, 8:52am UTC](https://www.ruby-forum.com/t/ruby-tk-how-to-make-something-happen-periodically/85129/2 "2007-02-10T08:52:47Z")

</div>

On Feb 10, 2007, at 2:30 AM, S P Arif Sahari Wibowo wrote:

> In Ruby Tk, how to make something happen periodically, while the user  
> does not touch the button, menu, etc.?

Go to [http://rubykitchensink.ca/](http://rubykitchensink.ca/) and search on “tktimer”.

Regards, Morton

---

<div class="post-metadata">

**Author:** ![S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3da27b/32.png) [@S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/u/S_P_Arif_Sahari_Wib)\
**Post date:** [February 10, 2007, 9:22am UTC](https://www.ruby-forum.com/t/ruby-tk-how-to-make-something-happen-periodically/85129/3 "2007-02-10T09:22:48Z")

</div>

On Feb 10, 2007, at 2:51 AM, Morton G. wrote:

> On Feb 10, 2007, at 2:30 AM, S P Arif Sahari Wibowo wrote:
> 
> > In Ruby Tk, how to make something happen periodically, while the user  
> > does not touch the button, menu, etc.?
> 
> Go to [http://rubykitchensink.ca/](http://rubykitchensink.ca/) and search on “tktimer”.

Let me recant on that. It’s better to go to Google and search “ruby  
+tktimer”. This finds a lot more stuff. I also recommend the  
following link

```
http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/ext/tk/sample/

```

There you will find links to tktimer.rb, tktimer2.rb, and tktimer3.rb  
– these are examples of the use of the TkTimer class. It’s also  
possible that you might find

```
http://raa.ruby-lang.org/project/rubytk_en/

```

and

```
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/212939

```

useful.

Regards, Morton

---

<div class="post-metadata">

**Author:** ![S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3da27b/32.png) [@S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/u/S_P_Arif_Sahari_Wib)\
**Post date:** [February 18, 2007, 12:20am UTC](https://www.ruby-forum.com/t/ruby-tk-how-to-make-something-happen-periodically/85129/4 "2007-02-18T00:20:37Z")

</div>

On Feb 10, 3:22 am, Morton G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Go to [http://rubykitchensink.ca/](http://rubykitchensink.ca/) and search on “tktimer”.
> 
> Let me recant on that. It’s better to go to Google and search “ruby  
> +tktimer”. This finds a lot more stuff. I also recommend the  
> following link  
> [http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/ext/tk/sample/](http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/ext/tk/sample/)

Works like a charm, once I know the keyword, things went smoothly.  
Thanks!

That said, do you know about proc in the arguments for TkTimer’s start  
method / parameter, where its result goes?

Thanks!

---

<div class="post-metadata">

**Author:** ![S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3da27b/32.png) [@S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/u/S_P_Arif_Sahari_Wib)\
**Post date:** [February 18, 2007, 4:50am UTC](https://www.ruby-forum.com/t/ruby-tk-how-to-make-something-happen-periodically/85129/5 "2007-02-18T04:50:54Z")

</div>

From: “S P Arif Sahari Wibowo” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Subject: Re: Ruby Tk: how to make something happen periodically?  
Date: Sun, 18 Feb 2007 08:20:11 +0900  
Message-ID: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> That said, do you know about proc in the arguments for TkTimer’s start  
> method / parameter, where its result goes?

## Please try this.

## TkTimer.new(100, 2, proc{|tm| p [:body, tm.class, tm.current\_args, tm.return\_value] tm.return\_value + 1 }).start(500, proc{|tm| p [:init, tm.class, tm.current\_args, tm.return\_value] 4 }, 1,2,3)

## It will returns

## (wait 500ms) [:init, TkTimer, [1, 2, 3], nil] (wait 100ms) [:body, TkTimer, [], 4] (wait 100ms) [:body, TkTimer, [], 5]

A TkTimer object keeps the result (last value) of the previous proc.  
You can get the result by TkTimer#return\_value method.

BTW, TkTimer class is not accurate. Because, the interval shows  
the wait between finish of previous proc and start of next proc.  
So, the timer delays by the time cost of the proc.

TkRTTimer class is a little more accurate than TkTimer class.  
It modifies the interval based on the difference between the requested  
time and current time. It doesn’t mean to keep same intervals.  
But it will make the delay by repeating minimum.  
Please try “ext/tk/sample/tkrttimer.rb”.  
It will show you a part of properties of TkRTTimer class.

---

<div class="post-metadata">

**Author:** ![S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3da27b/32.png) [@S\_P\_Arif\_Sahari\_Wib](https://www.ruby-forum.com/u/S_P_Arif_Sahari_Wib)\
**Post date:** [February 18, 2007, 2:30am UTC](https://www.ruby-forum.com/t/ruby-tk-how-to-make-something-happen-periodically/85129/6 "2007-02-18T02:30:46Z")

</div>

On Feb 17, 2007, at 6:20 PM, S P Arif Sahari Wibowo wrote:

> That said, do you know about proc in the arguments for TkTimer’s start  
> method / parameter, where its result goes?

No, I’m sorry, but I don’t know where the result of a block passed to  
TkTimer#start goes. In my own work, I have always written these  
blocks for their effects, not their results. IMO you shouldn’t rely  
on the results such blocks. Remember: “effect” can include  
modifications to the state of objects visible within your own code.

Regards, Morton
