create a port from a file descriptor:
(define scheme-make-fd-input-port
(let ([fun (get-ffi-obj "scheme_make_fd_input_port" #f
(_fun _int _racket _int _int -> _racket))])
(lambda (fd name)
(fun fd name 0 0))))
call with
(scheme-make-fd-input-port your-fd 'some-symbol)
On Wed, 07 Nov 2012 18:16:20 +0100, Kevin Tew <[email protected]> wrote:
Racket threads are green or user threads, they are not scheduled by the
operating system.
Blocking on a socket in XNextEvent blocks the entire Racket VM.
You need to use XConnectionNumber to get the X socket file descriptor
number and then create a port that you can sync on with Racket's sync
functionality.
I'm not sure how you would create the port using the ffi.
See
http://fixunix.com/xwindows/91558-xconnectionnumber-select.html.
Kevin
On 11/07/2012 09:58 AM, Laurent wrote:
Hi,
I don't know if this issue is due to me, Racket, Xlib FFI or Xlib in
itself, but I'm struggling with it. Hopefully someone knows.
In a multi-threaded application using Jon's Xlib FFI (
https://github.com/kazzmir/x11-racket ), I'm using one thread for
processing X events with XNextEvent, which is a blocking call
(apparently on a socket).
I have another thread that listens to a tcp port, and does not need to
do any X call.
The problem is that the second thread blocks on 'read' even if there
is something in the queue to read, unless some X event unblocks
XNextEvent, in which case both threads run, until there is no X event
left (and XNextEvent blocks again).
I have called XInitThreads prior to any other X call to enable threads
(and the return values says it's ok).
Any idea anyone?
Thanks,
Laurent
____________________
Racket Users list:
http://lists.racket-lang.org/users
--
---------------------------------------------------------
Tobias Hammer
DLR / Institute of Robotics and Mechatronics
Muenchner Str. 20, D-82234 Wessling
Tel.: 08153/28-1487
Mail: [email protected]
____________________
Racket Users list:
http://lists.racket-lang.org/users