home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / windows / x / 15144 next >
Encoding:
Internet Message Format  |  1992-08-12  |  3.2 KB

  1. Xref: sparky comp.windows.x:15144 comp.windows.x.apps:761 comp.windows.x.intrinsics:179
  2. Newsgroups: comp.windows.x,comp.windows.x.apps,comp.windows.x.intrinsics
  3. Path: sparky!uunet!wupost!uwm.edu!daffy!uwvax!zazen!news
  4. From: daerb@vms.macc.wisc.edu (David Erb)
  5. Subject: Summary: how to wake up XNextEvent for pipe/socket input pending?
  6. Message-ID: <1992Aug12.114223.24329@macc.wisc.edu>
  7. Sender: news@macc.wisc.edu (USENET News System)
  8. Organization: University of Wisconsin Academic Computing Center
  9. Date: 12 AUG 92 06:39:25    
  10. Lines: 83
  11.  
  12. Original text of query follows responses.
  13.  
  14. Responses were:
  15.  
  16. 1. See Bloomer, J, "Power Programming with RPC" O'Reilly & Associates.
  17.  
  18. 2. Use Intrinsics Toolkit XtAppAddInput.
  19.  
  20. 3. Put display->fd in select with socket of interest (not recommended).
  21.  
  22. 4. Same but use ConnectionNumber(display) not display->fd.
  23.  
  24. 5. A forked child should not have the same display connection as the parent.
  25.  
  26. 6. Signals and X do not mix terribly well.
  27.  
  28. 7. There's been a lot of traffic in this group about NOT doing Xlib or
  29.    any X thing inside a signal handler.
  30.  
  31. 8. XNextEvent will get interrupted, but since the X libraries
  32.    are not reentrant, you won't like the results...
  33.  
  34. Thanks and gratitudes to all who replied.  Hope I didn't forget anyone.
  35.  
  36. nh@cbnewsg.cb.att.com
  37. jhd@irfu.SE
  38. david@ora.com
  39. jrutledg@cs.ulowell.edu
  40. dob@inel.gov
  41. janzen@mprgate.mpr.CA
  42. bateman@cs.utk.edu
  43. eldred@hare.udev.cdc.com
  44. gnb@bby.com.AU
  45.  
  46. ----------------------------------------------------------
  47.  
  48. Original text of query was:
  49.  
  50. How do I get XNextEvent to wake up when input has
  51. become available on some pipe (fifo) or socket?  As far
  52. as I can tell, Xlib only wakes up on a fixed set of
  53. user-oriented events which does not include input pending.
  54.  
  55. I hope there is an elegant solution!  Any help would be
  56. greatly appreciated.  Please respond by e-mail and I will
  57. post a summary.  Thanks in advance.
  58.  
  59. Dave
  60.  
  61. Background: I have a bunch of programs which do all their
  62. plotting by sending messages over sockets to a central
  63. plotting server.  I'd like this plotting server to control
  64. an X window.  While the plotting server is sitting there
  65. waiting for regular X events, such as mouse, keyboard, and
  66. expose, I'd also like the plotting server to be able to
  67. respond to drawing requests over the socket.  For those
  68. who know SunView, the analogy would be notify_set_input_func().
  69.  
  70. A bunch of yucky solutions come to mind:
  71.  
  72. Yucky solution number 1:
  73. Open the window and the socket, then fork, with the parent
  74. putting a select() on the socket, and the child doing a
  75. normal XNextEvent() loop.  When the socket has data,
  76. the parent then does an XSendEvent() to the window.  The
  77. child doing the XNextEvent() wakes up on the event from
  78. the parent, then reads the socket to get the plotting 
  79. requests.
  80.  
  81. Yucky solution number 2:
  82. Use the operating system's asynchronous I/O option to take
  83. a SIGIO signal when input is pending.  Limited to those
  84. OS's with asynchronous I/O.
  85.  
  86. Yucky solution number 3:
  87. Use alarm to get a SIGALRM every one second and check the
  88. input socket for data.  Thus the XNextEvent loop works
  89. normally except it gets alarmed every second and data
  90. gets plotted from the signal handler.  Does Xlib do
  91. some things during plotting that are illegal for signal
  92. handlers?  Does XNextEvent even get interrupted by signals
  93. such as SIGALRM?
  94.  
  95.