5.11 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-fd fd mode [socket?]) → boolean?
fd : exact-integer? mode : '(read write) socket? : any/c = #t
Added in version 7.2.0.6 of package base.
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?
Changed in version 8.3.0.9 of package base: unsafe-poll-ctx-milliseconds-wakeup previously used current-inexact-milliseconds.
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
procedure
Synchronizaiton between the result of unsafe-make-signal-received and the scheduler will ensure the equivalent of (memory-order-release) before the call to the function produced by unsafe-make-signal-received and the equivalent of (memory-order-acquire) before the scheduler’s invocation of pollers.
Added in version 8.0.0.4 of package base.