Longstanding bug in ... XtAppMainLoop?
Jordan Hayes
jordan at bitway.com
Thu Feb 24 07:42:22 PST 2011
> when do application do not have a display ?
Xt is also a powerful general purpose environment for event-driven
programming. Input events, timers, now signals ... all handled pretty
well. Originally the big drawback was that XtAppMainLoop would *never*
return, but this ExitFlag stuff appears to be an attempt to allow it. I
also think it should return when there's no chance of ever getting
another event: if there's no display, no input sources are defined, no
signals are being watched, and no timers are set. Someday I'll see if I
can come up with a patch for that, but in the mean time changing the
main loop would be a good thing.
Here's some code that shows the problem:
#include <X11/Intrinsic.h>
static void _Tick(XtPointer baton, XtIntervalId* id) {
static int count = 0;
printf("%d beep!\n", ++count);
XtAppContext app = (XtAppContext)baton;
if (3 == count)
XtAppSetExitFlag(app);
else
XtAppAddTimeOut(app, 3000, _Tick, app);
}
int main(int argc, char** argv) {
XtToolkitInitialize();
XtAppContext app = XtCreateApplicationContext();
XtAppAddTimeOut(app, 3000, _Tick, app);
#ifdef SHOWBUG
XtAppMainLoop(app);
#else
for (;;) {
XtAppProcessEvent(app, XtIMAll);
if (XtAppGetExitFlag(app))
break;
}
#endif
return 0;
}
I wrote this paper nearly 20 years ago about it :-)
http://bitway.com/jordan/papers/USENIX/AppDev.html
/jordan
More information about the xorg
mailing list