38 lines
1.5 KiB
Racket
38 lines
1.5 KiB
Racket
#lang scribble/doc
|
|
@(require "common.ss"
|
|
(for-label racket/gui/dynamic))
|
|
|
|
@title{Startup Actions}
|
|
|
|
The @racketmodname[racket/gui/base] module can be instantiated only
|
|
once per operating-system process, because it sets hooks in the Racket
|
|
run-time system to coordinate between Racket thread scheduling and GUI
|
|
events. Attempting to instantiate it a second time results in an
|
|
exception.
|
|
|
|
Loading @racketmodname[racket/gui/base] sets two parameters:
|
|
|
|
@itemlist[
|
|
|
|
@item{@racket[executable-yield-handler] --- The executable yield
|
|
handler is set to evaluate @racket[(yield _initial-eventspace)]
|
|
before chaining to the previously installed handler. As a
|
|
result, the Racket process will normally wait until all
|
|
top-level windows are closed, all callbacks are invoked, and all
|
|
timers are stopped in the initial eventspace before the process
|
|
exits.}
|
|
|
|
@item{@racket[current-get-interaction-input-port] --- The interaction
|
|
port handler is set to wrap the previously installed handler's
|
|
result to yield to GUI events when the input port blocks on
|
|
reading. This extension of the default handler's behavior is
|
|
triggered only when the current thread is the handler thread of
|
|
some eventspace, in which case @racket[current-eventspace] is
|
|
set to the eventspace before invoking @racket[yield]. As a
|
|
result, GUI events normally can be handled while
|
|
@racket[read-eval-print-loop] (such as run by the plain Racket
|
|
executable) is blocked on input.}
|
|
|
|
]
|
|
|