event based timer

Chris Molozian chris at cmoz.me
Wed Jul 20 06:50:41 PDT 2011


Yes, Gtk is built using GLib and so depends on it. Here's some example 
code I'm using in a Vala project  (sorry) that uses GLib.Timeout:

public class TimeoutEntry : Granite.Entry, Gtk.Buildable {
private static const uint DEFAULT_TIMEOUT = 300; // in ms
/**
* The timeout length in milliseconds before {@see #timed_out} signal
* is called. The value defaults to 300.
*/
public uint timeout { get; set; default = DEFAULT_TIMEOUT; }
/**
* A callback fired after {@see timeout} length of time has expired in the
* non-empty entry field.
*/
public signal void timed_out();
private bool timeout_changed = false;
construct {
// add signals and callbacks
notify["timeout"].connect(() => { timeout_changed = false; });
realize.connect(() => { GLib.Timeout.add(timeout, emit_timed_out); });
changed.connect(() => { timeout_changed = true; }); // reset timeout
}
private bool emit_timed_out() {
if (timeout_changed) {
GLib.Timeout.add(timeout, emit_timed_out);
return (timeout_changed = false);
}
if (text != "") { timed_out(); }
return !timeout_changed;
}
}


Here I'm calling the timed_out signal which will execute an associated 
callback. I'm not sure what you mean by "trigger a gtk event on a 
timer", if I understand it correctly this should be helpful 
gobject.Signals.emitv <http://gtkd.mikewey.eu/src/gobject/Signals.html> 
and have a look here: 
http://stackoverflow.com/questions/1557025/create-and-emit-gtk-signal

Hope this helps,

Chris

PS: the problems you're encountering seem less and less like problems 
with D (unless they're compiler bugs)... and more like issues with 
Gtk/GLib. The GTK IRC channel can be very (very) quiet but it might help.


On 07/20/11 14:34, maarten van damme wrote:
> It turned out there was a Timer in glib and glib is a part of gtk(I 
> think). When you use gtkd you have acces to glib and that worked but 
> it takes 50 procent of my cpu. (this was actually pretty strange. It 
> worked fast and good untill I rebooted. Now it runs prety slow)
> and I don't think you can trigger a gtk event on a timer.
>
> 2011/7/20 Sean Kelly <sean at invisibleduck.org 
> <mailto:sean at invisibleduck.org>>
>
>     Is there a timer function built into gtk?  Or can you have a
>     separate thread trigger a gtk event on a timer?
>
>     On Jul 20, 2011, at 5:00 AM, maarten van damme wrote:
>
>     > The problem with Sean Kelly's and the message sending approach
>     is that when using gtk I have to call Main.run(); and it pauses
>     then untill the windows are all closed. when I place a loop before
>     Main.run() I never get a window so If I want to use some kind of
>     timer using threads I need to use shared? (correct me if I'm wrong)
>     >
>     > The glib.Timeout works like a charm, Thank you chris
>     >
>     > 2011/7/20 Sean Kelly <sean at invisibleduck.org
>     <mailto:sean at invisibleduck.org>>
>     > On Jul 19, 2011, at 3:19 AM, maarten van damme wrote:
>     >
>     > > Hi everyone,
>     > > for getting to know d a little bit I'm writing a simple
>     pingpong game using gtk.
>     > > for it to work I need to be able to do something every 0.1
>     seconds so I was wondering if there was some kind of timer in the
>     phobos library.
>     > > I've looked everywhere but couldn't find one. Is it missing
>     and do i have to write my own or have I overlooked it?
>     >
>     > void loop() {
>     >    while( true ) {
>     >        doWhatever();
>     >        Thread.sleep(dur!"msecs"(100));
>     >    }
>     > }
>     >
>     > spawn(&loop);
>     >
>     >
>     > Or you could have the spawned thread send a message every 100
>     milliseconds, etc.
>     >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20110720/c87d647d/attachment-0001.html>


More information about the Digitalmars-d mailing list