结构体
GLibMainContext
说明 [src]
struct GMainContext {
/* No available fields */
}
GMainContext
结构体是不透明的数据类型,用于表示要主循环中处理的一组源。
方法
g_main_context_default
返回全局默认主上下文。当未明确指定主循环时,这是用于主循环方法的主上下文,并且对应于“主”主循环。另请参阅 g_main_context_get_thread_default()
。
g_main_context_get_thread_default
获取此线程的线程默认 GMainContext
。希望在默认上下文之外运行的异步操作应调用此方法或 g_main_context_ref_thread_default()
以获取一个 GMainContext
来向其中添加其 GSource
。(请注意,即使在单线程程序中,应用程序有时也可能希望临时推送一个非默认上下文,因此如果您在默认线程中运行,则不能安全地假定这将始终返回 NULL
)。
自版本:2.22
g_main_context_pusher_free
将 pusher
的主上下文弹出为线程默认主上下文。有关详细信息,请参阅 g_main_context_pusher_new()
。
自版本:2.64
g_main_context_ref_thread_default
获取此线程的线程默认 GMainContext
,如同 g_main_context_get_thread_default()
,但也会使用 g_main_context_ref()
为其添加一个引用。此外,与 g_main_context_get_thread_default()
不同,如果线程默认上下文是全局默认上下文,则此方法将返回该 GMainContext
(已添加了一个引用),而不是返回 NULL
。
自版本:2.32
实例方法
g_main_context_acquire
尝试成为指定上下文的拥有者。如果有其他线程拥有该上下文,则立即返回 FALSE
。所有权是真正递归的:所有者可以再次要求所有权,并且将在调用 g_main_context_release()
的次数与 g_main_context_acquire()
相同的次数后释放所有权。
g_main_context_check
将轮询结果传递回主循环。您应谨慎地按照从 g_main_context_query()
接收到的方式传递 fds
及其长度 n_fds
,因为此函数依赖于关于如何填充 fds
的假设。
g_main_context_find_source_by_funcs_user_data
使用给定的来源函数和用户数据查找来源。如果存在具有相同来源函数和用户数据的多个来源,则将返回找到的第一个来源。
g_main_context_is_owner
确定此线程是否拥有此 GMainContext
的(递归)所有权。在等待可能阻塞以获取 context
所有权的另一个线程之前了解此信息非常有用。
since: 2.10
g_main_context_iteration
为给定的主循环运行一个单一迭代。这涉及检查是否有任何事件源准备好进行处理,如果没有任何事件源准备好并且 may_block
为 TRUE
,则等待源准备好,然后调度准备好的最高优先级事件源。否则,如果 may_block
为 FALSE
,则不会等待源准备好,此时只会调度准备好(如果现在有的话)的那些最高优先级事件源,而无需进一步等待。
g_main_context_push_thread_default
获取 context
并将其设置为当前线程的线程默认上下文。这会导致在此线程中启动的某些异步操作(如大多数基于 [gio][gio] 的 I/O)在 context
下运行并将结果传递给其主循环,而不是在主线程的全局默认主上下文中运行。注意,调用此函数会更改由 g_main_context_get_thread_default()
返回的上下文,而不是由 g_main_context_default()
返回的上下文,因此它不会影响由诸如 g_idle_add()
等函数使用的上下文。
自版本:2.22
g_main_context_pusher_new
使用 g_main_context_push_thread_default()
将 main_context
推入作为当前线程的新线程默认主上下文,并返回一个新的 GMainContextPusher
。使用 g_main_context_pusher_free() 弹出。在存在 GMainContextPusher
的同时对 main_context
使用 g_main_context_pop_thread_default()
可能会导致未定义的行为。
自版本:2.64
g_main_context_query
确定轮询此主循环所需的信息。在调用 g_main_context_check()
时,你应该小心地按原样传递结果 fds
数组及其长度 n_fds
,因为这个函数依赖于填充数组时做出的假设。
g_main_context_release
释放此前通过 g_main_context_acquire()
由此线程获取的上下文的拥有权。如果多次获取上下文,只有在 g_main_context_release()
被调用的次数和获取的次数一样多时,才会释放所有权。
g_main_context_wait
尝试获取指定上下文的拥有权,就像 g_main_context_acquire()
中那样。但是,如果另一个线程是所有者,请自动释出 mutex
,并等到该所有者释放拥有权或 cond
被标记后,在 cond
上等待,然后再次(一次)尝试获取所有权。
已弃用:2.58
g_main_context_wakeup
如果 context
当前在 g_main_context_iteration()
中阻塞,等待某个源变为就绪状态,则导致它停止阻塞并返回。否则,导致下次调用 g_main_context_iteration()
在不阻塞的情况下返回。