GtkThread
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.
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
.
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
.
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.
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
The real main function
Forget the current GUI thread. The next call to main
will register its caller as GUI thread.
Forget the current GUI thread. The next call to main
will register its caller as GUI thread.
Add an asynchronous job (to do in the main thread)
Add a synchronous job (to do in the main thread)
Add a synchronous job (to do in the main thread)
Whether it is safe to call most GTK functions directly from the current thread
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
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