Stability | provisional |
---|---|
Portability | portable (depends on GHC) |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Utility functions for threading
Synopsis
- setGUIThread :: Thread -> IO ()
- getGUIThread :: IO (Maybe Thread)
- setCurrentThreadAsGUIThread :: IO ()
- postGUISyncWithPriority :: Int32 -> IO a -> IO a
- postGUISync :: IO a -> IO a
- postGUIASyncWithPriority :: Int32 -> IO () -> IO ()
- postGUIASync :: IO () -> IO ()
- compareThreads :: Thread -> Thread -> IO Bool
- isGUIThread :: IO Bool
- newtype Thread = Thread (ManagedPtr Thread)
- threadSelf :: (HasCallStack, MonadIO m) => m Thread
Documentation
Utility functions to run IO actions on the GUI thread. You must call
setGUIThread
or setCurrentThreadAsGUIThread
before using the synchronous options, or you risk deadlocking.
Note that the notion of Thread used by this module corresponds to operating system threads, not Haskell threads. A single operating system thread may run multiple Haskell threads, and a Haskell thread may migrate between operating system threads. In order for this nothing of Thread to make sense to a Haskell program, we must be working in a bound Haskell thread, which is tied to a single operating system thread. Haskell's main function is automatically bound, and the postGUI functions will create a new bound thread if nessasary.
setGUIThread :: Thread -> IO () Source #
Inform gi-gtk-hs what thread is running the gtk main loop.
getGUIThread :: IO (Maybe Thread) Source #
Get the Thread that is running the Gtk main loop, if it has been set.
setCurrentThreadAsGUIThread :: IO () Source #
Inform gi-gtk-hs that the current thread is, or will be, running the gtk main loop.
Equivalent to threadSelf
>>= setGUIThread
postGUISyncWithPriority :: Int32 -> IO a -> IO a Source #
Queue an action to be run in the GTK event loop. If called from the same process as the event loop, this runs the action directly. Otherwise, this queues it in GTK's event loop and blocks until the action is complete
You must call setGUIThread
or setCurrentThreadAsGUIThread
before this.
Priority is typically between PRIORITY_HIGH_IDLE
(100) and PRIORITY_DEFAULT_IDLE
(200)
postGUISync :: IO a -> IO a Source #
Queue an action to be run in the GTK event loop. If called from the same process as the event loop, this runs the action directly. Otherwise, this queues it in GTK's event loop and blocks until the action is complete
You must call setGUIThread
or setCurrentThreadAsGUIThread
before this.
Equivalent to postGUISyncWithPriority
PRIORITY_DEFAULT_IDLE
postGUIASyncWithPriority :: Int32 -> IO () -> IO () Source #
Queue an action to be run in the GTK event loop. This function queues the event regardless of what process it is called from, and returns immidietly.
Priority is typically between PRIORITY_HIGH_IDLE
(100) and PRIORITY_DEFAULT_IDLE
(200)
postGUIASync :: IO () -> IO () Source #
Queue an action to be run in the GTK event loop. This function queues the event regardless of what process it is called from, and returns immidietly.
Equivalent to postGUIASyncWithPriority
PRIORITY_DEFAULT_IDLE
compareThreads :: Thread -> Thread -> IO Bool Source #
Test if two Thread
s refer to the same OS thread.
A Thread
can be gotten from threadSelf
.
Note that threadSelf
only makes sense from a bound thread.
isGUIThread :: IO Bool Source #
Check if the current thread is the Gtk gui thread.
You must call setGUIThread
or setCurrentThreadAsGUIThread
before this.
This only makes sense when called from a bound thread.
Instances
Eq Thread | |
GBoxed Thread | |
Defined in GI.GLib.Structs.Thread | |
ManagedPtrNewtype Thread | |
Defined in GI.GLib.Structs.Thread toManagedPtr :: Thread -> ManagedPtr Thread # | |
TypedObject Thread | |
Defined in GI.GLib.Structs.Thread | |
HasParentTypes Thread | |
Defined in GI.GLib.Structs.Thread | |
tag ~ 'AttrSet => Constructible Thread tag | |
Defined in GI.GLib.Structs.Thread | |
HasAttributeList Thread | |
Defined in GI.GLib.Structs.Thread | |
(info ~ ResolveThreadMethod t Thread, OverloadedMethod info Thread p, HasField t Thread p) => HasField (t :: Symbol) Thread p | |
Defined in GI.GLib.Structs.Thread | |
(signature ~ m (Ptr ()), MonadIO m) => OverloadedMethod ThreadJoinMethodInfo Thread signature | |
Defined in GI.GLib.Structs.Thread overloadedMethod :: Thread -> signature | |
(signature ~ m Thread, MonadIO m) => OverloadedMethod ThreadRefMethodInfo Thread signature | |
Defined in GI.GLib.Structs.Thread overloadedMethod :: Thread -> signature | |
(signature ~ m (), MonadIO m) => OverloadedMethod ThreadUnrefMethodInfo Thread signature | |
Defined in GI.GLib.Structs.Thread overloadedMethod :: Thread -> signature | |
OverloadedMethodInfo ThreadJoinMethodInfo Thread | |
Defined in GI.GLib.Structs.Thread overloadedMethodInfo :: Maybe ResolvedSymbolInfo | |
OverloadedMethodInfo ThreadRefMethodInfo Thread | |
Defined in GI.GLib.Structs.Thread overloadedMethodInfo :: Maybe ResolvedSymbolInfo | |
OverloadedMethodInfo ThreadUnrefMethodInfo Thread | |
Defined in GI.GLib.Structs.Thread overloadedMethodInfo :: Maybe ResolvedSymbolInfo | |
(info ~ ResolveThreadMethod t Thread, OverloadedMethodInfo info Thread) => IsLabel t (MethodProxy info Thread) | |
Defined in GI.GLib.Structs.Thread | |
(info ~ ResolveThreadMethod t Thread, OverloadedMethod info Thread p) => IsLabel t (Thread -> p) | |
Defined in GI.GLib.Structs.Thread | |
IsGValue (Maybe Thread) | |
Defined in GI.GLib.Structs.Thread | |
type AttributeList Thread | |
Defined in GI.GLib.Structs.Thread type AttributeList Thread = ThreadAttributeList | |
type ParentTypes Thread | |
Defined in GI.GLib.Structs.Thread |
threadSelf :: (HasCallStack, MonadIO m) => m Thread #