Re: [Ntw-devel] Timers
Status: Beta
Brought to you by:
drblast
|
From: Yua C. <ca...@gz...> - 2006-06-26 23:43:47
|
I know that I can call resetTimer directly from the button callback, but it
seems to be a duplication, since closing/destroying the window already has
an event tied to it.
I understand the whole infinite loop thing with regular events, but the
final events DESTROY/DELETE should always fire for a widget so the
programmer can do some garbage cleanup. In this case, closing the dialog
widget "normally" by clicking on the 'X' does send the DESTROY/DELETE event
and the timer is reset in the cleanup callback. Mebbe we should add in
ntw_dialog/window_close(ntwWidget* widget) to do the same thing as the 'X'?
Like I said, I'm a big fan of garbage cleanup. ;)
Yua Ca Van
----- Original Message -----
From: "Ian Larsen" <dr...@gm...>
To: "Yua CaVan" <ca...@gz...>
Cc: "NTW Mailing List" <ntw...@li...>
Sent: Monday, June 26, 2006 6:37 PM
Subject: Re: [Ntw-devel] Timers
> No, neither of those will fire.
>
> The reason is that if you have events fire in response to server
> changes, you can get caught in ugly loops where the state is
> undetermined.
>
> For example, if I change the text of an entry widget, and it fires an
> entry-text-changed event, the server will change the text accordingly,
> which will send another message to the client, which will change the
> text and fire yet another event...
>
> To avoid this sort of thing, events are only fired based on input from
> the actual user of the client, (except for timer events). This keeps
> things simpler conceptually for the application programmer.
>
> In this case, you could call resetTimer directly.
>
> If you think this is the wrong approach, please let me know.
>
> -Ian
>
>
> On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> gotcha. makes sense now. :)
>>
>> it looks like the resetTimer callback for dlg is never called when the
>> dialog is destroyed. I had expected the DESTROY_EVENT or the DELETE_EVENT
>> would fire when I called ntw_widget_destroy().
>>
>> Yua Ca Van
>> ----- Original Message -----
>> From: "Ian Larsen" <dr...@gm...>
>> To: "Yua CaVan" <ca...@gz...>
>> Cc: "NTW Mailing List" <ntw...@li...>
>> Sent: Monday, June 26, 2006 6:01 PM
>> Subject: Re: [Ntw-devel] Timers
>>
>>
>> > Whoops,
>> >
>> > That callback declaration should be:
>> >
>> > void
>> > ping (struct ntw_event_data *edata, ntwWidget *userdata){
>> >
>> > }
>> >
>> > A pointer is passed to the event data, not the event data itself.
>> >
>> > -Ian
>> >
>> > On 6/26/06, Ian Larsen <dr...@gm...> wrote:
>> >> At first glance, it looks like you're omitting the event data
>> >> structure in your callback declaration.
>> >>
>> >> It should look like this:
>> >>
>> >> void
>> >> ping(struct ntw_event_data, ntwWidget *userdata){
>> >> //ping callback function
>> >> }
>> >>
>> >> The problem is that the helloworld.c example isn't clear that this is
>> >> the proper declaration for a callback function, you'd have to look at
>> >> ntwtest for that. I'll fix that in the docs so nobody else falls into
>> >> the same trap.
>> >>
>> >> By the way, the ntw_event_data structure looks like this:
>> >>
>> >> struct ntw_event_data {
>> >> int32 id;
>> >> int32 event;
>> >> int32 synchronized;
>> >> char data[];
>> >> }
>> >>
>> >> With the last char data[] being any applicable data that the client
>> >> sends back, such as the new text for an ENTRY_TEXT_CHANGED event, for
>> >> example.
>> >>
>> >> Hope that helps,
>> >> Ian
>> >>
>> >> On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> >> > I've modified the helloworld.c to add in a timer to test something
>> >> > out
>> >> > and
>> >> > realized that we don't have a clean way of closing out dialog
>> >> > windows...
>> >> >
>> >> > I've created a callback function called ping as well as setting the
>> >> > window
>> >> > and timer variables to static:
>> >> >
>> >> > static ntwWidget * pMainWnd; /* is the main window */
>> >> > static ntwWidget * pMainTimer; /* is the timer */
>> >> >
>> >> > void
>> >> > ping (ntwWidget * user_data) {
>> >> > ntwWidget *dlg;
>> >> > ntwWidget *layout;
>> >> > ntwWidget *label;
>> >> > ntwWidget *button;
>> >> > ntwWidget *btnLabel;
>> >> >
>> >> > dlg = ntw_dialog_new(
>> >> > pMainWnd, /* parent window */
>> >> > 100, /* width */
>> >> > 80, /* height */
>> >> > TRUE, /* Modality */
>> >> > "PING!!!!!" /* Title */
>> >> > );
>> >> >
>> >> > layout = ntw_grid_new(3,2,FALSE);
>> >> >
>> >> > ntw_container_add(dlg,layout);
>> >> >
>> >> > label = ntw_label_new("A timer event has just occured.\n"
>> >> > "Please click the OK button");
>> >> > ntw_grid_add(
>> >> > layout,
>> >> > label,
>> >> > 1,
>> >> > 2,
>> >> > 1,
>> >> > 2,
>> >> > 0,
>> >> > 0,
>> >> > 0,
>> >> > 0
>> >> > );
>> >> >
>> >> > button = ntw_button_new();
>> >> > btnLabel = ntw_label_new("OK");
>> >> >
>> >> > ntw_container_add(button,btnLabel);
>> >> >
>> >> > ntw_grid_add(
>> >> > layout,
>> >> > button,
>> >> > 1,
>> >> > 2,
>> >> > 2,
>> >> > 3,
>> >> > 0,
>> >> > 0,
>> >> > 0,
>> >> > 0
>> >> > );
>> >> >
>> >> > ntw_add_callback(button, BUTTON_CLICKED,
>> >> > (func_ptr)&closePing,dlg,ASYNC);
>> >> > ntw_add_callback(dlg, DESTROY_EVENT,
>> >> > (func_ptr)&resetPing,NULL,ASYNC);
>> >> > ntw_add_callback(dlg,
>> >> > DELETE_EVENT,(func_ptr)&resetPing,NULL,ASYNC);
>> >> >
>> >> > ntw_widget_show(dlg);
>> >> > }
>> >> >
>> >> > now, the dialog will pop up and the timer will be reset when the
>> >> > dialog
>> >> > is
>> >> > closed using the close button ( 'X' in the upper-right ), but the
>> >> > closePing
>> >> > function:
>> >> >
>> >> > void
>> >> > closePing(ntwWidget * user_data) {
>> >> > ntw_widget_destroy(user_data); /* should be dlg */
>> >> > }
>> >> >
>> >> > seems to destroy the BUTTON, rather than the dialog even though
>> >> > dlg's
>> >> > pointer is the user data. Any clues?
>> >> >
>> >> > for completeness, here's resetPing:
>> >> >
>> >> > void
>> >> > resetPing() {
>> >> > ntw_timer_reset(pMainTimer);
>> >> > }
>> >> >
>> >> > and the timer is set up as:
>> >> > ...
>> >> > pMainTimer = ntw_timer_add(10 /* seconds */,ASYNC);
>> >> > ntw_timer_set_callback(pMainTimer, (func_ptr)&ping, timer);
>> >> >
>> >> > Yua Ca Van
>> >> > ----- Original Message -----
>> >> > From: "Ian Larsen" <dr...@gm...>
>> >> > To: "Yua CaVan" <ca...@gz...>
>> >> > Cc: "NTW Mailing List" <ntw...@li...>
>> >> > Sent: Monday, June 26, 2006 2:21 PM
>> >> > Subject: Re: [Ntw-devel] Timers
>> >> >
>> >> >
>> >> > > Oh yeah...thanks. Done. :-)
>> >> > >
>> >> > > -Ian
>> >> > >
>> >> > > On 6/26/06, Yua CaVan <ca...@gz...> wrote:
>> >> > >> You need to update the Makefile.mingw for the Server and Client
>> >> > >> to
>> >> > >> add
>> >> > >> timer.o to the list of objects to be compiled. :)
>> >> > >>
>> >> > >> Yua Ca Van
>> >> > >> ----- Original Message -----
>> >> > >> From: "Ian Larsen" <dr...@gm...>
>> >> > >> To: "NTW Mailing List" <ntw...@li...>
>> >> > >> Sent: Sunday, June 25, 2006 2:38 PM
>> >> > >> Subject: [Ntw-devel] Timers
>> >> > >>
>> >> > >>
>> >> > >> > All,
>> >> > >> >
>> >> > >> > I've added a timer widget to the C server and client. The
>> >> > >> > latest
>> >> > >> > is
>> >> > >> > in CVS. It seems to work well, but I haven't tested it very
>> >> > >> > much
>> >> > >> > yet.
>> >> > >> >
>> >> > >> > The code is in the files timer.c and timer.h, in both the
>> >> > >> > Client
>> >> > >> > and
>> >> > >> > Server directories.
>> >> > >> >
>> >> > >> > -Ian
>> >> > >> >
>> >> > >> > Using Tomcat but need to do more? Need to support web services,
>> >> > >> > security?
>> >> > >> > Get stuff done quickly with pre-integrated technology to make
>> >> > >> > your
>> >> > >> > job
>> >> > >> > easier
>> >> > >> > Download IBM WebSphere Application Server v.1.0.1 based on
>> >> > >> > Apache
>> >> > >> > Geronimo
>> >> > >> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
>> >> > >> > _______________________________________________
>> >> > >> > Ntw-devel mailing list
>> >> > >> > Ntw...@li...
>> >> > >> > https://lists.sourceforge.net/lists/listinfo/ntw-devel
>> >> > >> >
>> >> > >> >
>> >> > >>
>> >> > >>
>> >> > >>
>> >> > >
>> >> > >
>> >> >
>> >> >
>> >> >
>> >>
>> >
>> >
>>
>>
>>
>
>
|