结构

GLibThreadPool

描述 [src]

struct GThreadPool {
  GFunc func;
  gpointer user_data;
  gboolean exclusive;
}

GThreadPool 结构表示一个线程池。

当你希望异步启动工作的执行并继续在自己的线程中工作时,线程池很有用。如果这种情况经常发生,每次启动和销毁线程的开销都可能太高。在这种情况下,重用已经启动的线程似乎是个好主意。事实确实如此,但实现这一点可能很繁琐且容易出错。

因此,GLib 为你的方便提供了线程池。另一个优势是,当你的程序的不同子系统使用 GLib 时,这些线程可以共享。

要创建一个新的线程池,请使用 g_thread_pool_new()。它由 g_thread_pool_free() 销毁。

如果你想在某个线程池内执行特定任务,请使用 g_thread_pool_push()

要获取正在运行的线程的当前数,请调用 g_thread_pool_get_num_threads()。要获取尚未处理的任务数,请调用 g_thread_pool_unprocessed()。要控制线程池的最大线程数,请使用 g_thread_pool_get_max_threads()g_thread_pool_set_max_threads()

最后,你可以控制未使用的线程数,这些线程由 GLib 保留以备将来使用。当前数量可以使用 g_thread_pool_get_num_unused_threads() 获取。最大数量可以使用 g_thread_pool_get_max_unused_threads()g_thread_pool_set_max_unused_threads() 控制。所有当前未使用的线程可以通过调用 g_thread_pool_stop_unused_threads() 来停止。

结构成员
func

在这个池的线程中执行的函数。

user_data

此池的线程的用户数据。

exclusive

该池是否是所有线程唯一的。

功能

g_thread_pool_get_max_idle_time

此函数将返回线程将在线程池中等待新任务的最长时间interval,然后被 停止。

自:2.10

g_thread_pool_get_max_unused_threads

返回允许的最大未使用的 线程数。

g_thread_pool_get_num_unused_threads

返回当前未使用的 线程数。

g_thread_pool_new

此函数创建一个新的线程 池。

g_thread_pool_new_full

此函数创建一个类似于 g_thread_pool_new() 的新线程池,但是允许指定 item_free_func 来释放传递给 g_thread_pool_push() 的数据(如果 GThreadPool 在任务全部执行完毕之前停止并释放)。

从 2.70 开始

g_thread_pool_set_max_idle_time

此函数将设置线程在池中等待新任务可以空闲的最长 interval,然后再停止。此函数类似于定期对常规超时调用 g_thread_pool_stop_unused_threads(),只是这个函数是基于每个线程执行的。

自:2.10

g_thread_pool_set_max_unused_threads

将未使用的最大线程数设置为 max_threads。如果 max_threads 为 -1,则不限制未使用的线程数。

g_thread_pool_stop_unused_threads

停止当前所有未使用的线程。这不会更改未使用的最大线程数。此函数可用于定期停止所有未使用的线程,例如从 g_timeout_add()。

实例方法

g_thread_pool_free

释放为 pool 分配的所有资源。

g_thread_pool_get_max_threads

返回 pool 的最大线程数。

g_thread_pool_get_num_threads

返回当前在 pool 中运行的线程数。

g_thread_pool_move_to_front

将项移至未处理项队列的前面,以便接下来对其进行处理。

从 2.46 开始

g_thread_pool_push

data 插入到由 pool 执行的任务列表中。

g_thread_pool_set_max_threads

设置 pool 允许的最大线程数。-1 的值表示最大线程数不受限制。如果 pool 是一个独占线程池,那么不允许将最大线程数设置为 -1。

g_thread_pool_set_sort_function

设置用于对任务列表进行排序的函数。这允许对任务进行处理,其优先级由 func 确定,而不仅仅是按照将其添加到池中的顺序。

自:2.10

g_thread_pool_unprocessed

返回 pool 中仍未处理的任务数。