结构
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_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_stop_unused_threads
停止当前所有未使用的线程。这不会更改未使用的最大线程数。此函数可用于定期停止所有未使用的线程,例如从 g_timeout_add()。