Re: [Ntw-devel] Timers
Status: Beta
Brought to you by:
drblast
|
From: Ian L. <dr...@gm...> - 2006-06-26 23:37:36
|
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
> >> > >> >
> >> > >> >
> >> > >>
> >> > >>
> >> > >>
> >> > >
> >> > >
> >> >
> >> >
> >> >
> >>
> >
> >
>
>
>
|