Module GtkThread
val main : unit -> unit
The main loop to use with threads.
GMain.main
does not work! This changesGMain.main
to callthreaded_main
rather thanGtkMain.Main.default_main
, so subsequent calls will work. The first call sets the GUI thread, and subsequent calls tomain
will be automatically routed throughsync
. With system threads, the ocaml giant lock is now released on polling, so that other ocaml threads can run without busy wait.Setting
busy_waiting
totrue
forces the main loop to be non-blocking. This is required with VM threads. The default value is set totrue
at startup if the environment variableLABLGTK_BUSY_WAIT
is set to something other than0
.
val busy_waiting : bool Stdlib.ref
Setting
busy_waiting
totrue
forces the main loop to be non-blocking. This is required with VM threads. The default value is set totrue
at startup if the environment variableLABLGTK_BUSY_WAIT
is set to something other than0
.Start the main loop in a new GUI thread. Do not use recursively. Do not use with the Quartz backend, as the GUI must imperatively run in the main thread.
val start : unit -> Thread.t
Start the main loop in a new GUI thread. Do not use recursively. Do not use with the Quartz backend, as the GUI must imperatively run in the main thread.
The real main function
val thread_main : unit -> unit
The real main function
Forget the current GUI thread. The next call to
main
will register its caller as GUI thread.
val reset : unit -> unit
Forget the current GUI thread. The next call to
main
will register its caller as GUI thread.
val async : ('a -> unit) -> 'a -> unit
Add an asynchronous job (to do in the main thread)
Add a synchronous job (to do in the main thread)
val sync : ('a -> 'b) -> 'a -> 'b
Add a synchronous job (to do in the main thread)
Whether it is safe to call most GTK functions directly from the current thread
val gui_safe : unit -> bool
Whether it is safe to call most GTK functions directly from the current thread
Allow other threads to run, and process the message queue. The following ensures that messages will be processed even if another main loop is running:
Glib.Timeout.add ~ms:100 ~callback:GtkThread.do_jobs