Module GtkThread

module GtkThread: sig .. end
The main loop to use with threads. GMain.main does not work! This changes GMain.main to call threaded_main rather than GtkMain.Main.default_main, so subsequent calls will work. The first call sets the GUI thread, and subsequent calls to main will be automatically routed through sync. With system threads, the ocaml giant lock is now released on polling, so that other ocaml threads can run without busy wait.

val main : unit -> unit
Setting busy_waiting to true forces the main loop to be non-blocking. This is required with VM threads. The default value is set to true at startup if the environment variable LABLGTK_BUSY_WAIT is set to something other than 0.
val busy_waiting : bool Pervasives.ref
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
The real main function
val thread_main : unit -> unit
Forget the current GUI thread. The next call to main will register its caller as GUI thread.
val reset : unit -> unit
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
Whether it is safe to call most GTK functions directly from the current thread
val gui_safe : unit -> bool
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
val do_jobs : unit -> bool
val set_do_jobs_delay : float -> unit
Set the delay used in the main loop when busy_waiting is true. Higher value will make the application less CPU-consuming, but (relatively) less reactive. Default value is 0.013 .