5.10 Thread Scheduling
(require ffi/unsafe/schedule) | package: base |
Added in version 6.11.0.1 of package base.
procedure
(unsafe-poller poll) → any/c
poll : (evt? (or/c #f any/c) . -> . (values (or/c #f list?) evt?))
The first argument to poll is always the object that is used as a synchronizable event with the poller as its prop:evt value. Let’s call that value evt.
The second argument to poll is #f when poll is called to check whether the event is ready. The result must be two values. The first result value is a list of results if evt is ready, or it is #f if evt is not ready. The second result value is #f if evt is ready, or it is an event to replace evt (often just evt itself) if evt is not ready.
When the thread scheduler has determined that the Racket process should sleep until an external event or timeout, then poll is called with a non-#f second argument, wakeups. In that case, if the first result value is a list, then the sleep will be canceled, but the list is not recorded as the result (and poll most likely will be called again). In addition to returning a #f initial value, poll can call unsafe-poll-ctx-fd-wakeup, unsafe-poll-ctx-eventmask-wakeup, and/or unsafe-poll-ctx-milliseconds-wakeup on wakeups to register wakeup triggers.
procedure
(unsafe-poll-ctx-fd-wakeup wakeups fd mode) → void?
wakeups : any/c fd : fixnum? mode : '(read write error)
procedure
(unsafe-poll-ctx-eventmask-wakeup wakeups mask) → void? wakeups : any/c mask : fixnum?
procedure
(unsafe-poll-ctx-milliseconds-wakeup wakeups msecs) → void? wakeups : any/c msecs : flonum?
procedure
(unsafe-set-sleep-in-thread! foreground-sleep fd) → void? foreground-sleep : (-> any/c) fd : fixnum?
This function works on when OS-level threads are available within the Racket implementation. It always works for Mac OS.
procedure