函数
GLibThreadPoolnew
声明 [源代码]
GThreadPool*
g_thread_pool_new (
GFunc func,
gpointer user_data,
gint max_threads,
gboolean exclusive,
GError** error
)
描述 [源代码]
此函数创建一个新的线程池。
每当调用 g_thread_pool_push() 时,将创建一个新线程或重用未使用的线程。此线程池最多可以有 max_threads
个线程并发运行。max_threads
= -1 允许创建的线程数不限。新创建或重用的线程现在将执行函数 func
,带有两个参数。第一个是 g_thread_pool_push()
的参数,第二个是 user_data
。
将 g_get_num_processors()
传递给 max_threads
以创建与系统上的逻辑处理器数量一样多的线程。这不会将每个线程固定在特定的处理器上。
参数 exclusive
决定线程池是否独占拥有所有线程或者与其它线程池共享。如果 exclusive
是 TRUE
,则立即启动 max_threads
个线程,并独占运行直到被 g_thread_pool_free() 销毁。如果 exclusive
是 FALSE
,需要时创建线程,并共享于所有非独占线程池之间。这意味着独占线程池的 max_threads
可能不等于 -1。此外,独占线程池不受 g_thread_pool_set_max_idle_time() 的影响,因为它们的线程从不会被考虑为空闲并返回到全局池。
请注意,独占线程池使用的线程都将继承当前线程的调度器设置,而非独占线程池使用的线程将继承第一个创建此类线程池的线程的调度器设置。
当调用此函数时,将生成至少一个线程,无论是创建 max_threads
个独占线程,还是保留当前线程的调度器设置以备未来使用。
错误参数 error
可以是 NULL
以忽略错误,也可以是非 NULL
以报告错误。只在将 exclusive
设置为 TRUE
且不能创建所有 max_threads
个线程时发生错误。有关可能出现的错误,请参见 GThreadError
。请注意,即使在错误情况下,也会返回一个有效的 GThreadPool
。
此函数不直接对语言绑定可用。
参数
func
-
类型:
GFunc
在新的线程池的线程中执行的函数。
user_data
-
类型:
gpointer
每次调用时传递给 func 的用户数据。
此参数可以是 NULL
。数据由函数的调用者拥有。 max_threads
-
类型:
gint
在新线程池中并发执行的最大线程数,-1 表示没有限制。
exclusive
-
类型:
gboolean
此线程池是否应该是独占的?
error
-
类型:
GError **
可恢复错误的返回位置。
此参数可以是 NULL
。如果返回位置不是 NULL
,则必须将其初始化为NULL
的GError*
。如果没有错误,该函数会将参数初始化为 NULL
。发生错误时,参数将被设置为新的 GError
的地址;调用者将负责接管数据,并负责释放它。
返回值
类型: GThreadPool
新的 GThreadPool
。
数据由被调用函数拥有。 |