函数

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 决定线程池是否独占拥有所有线程或者与其它线程池共享。如果 exclusiveTRUE,则立即启动 max_threads 个线程,并独占运行直到被 g_thread_pool_free() 销毁。如果 exclusiveFALSE,需要时创建线程,并共享于所有非独占线程池之间。这意味着独占线程池的 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,则必须将其初始化为 NULLGError*
如果没有错误,该函数会将参数初始化为 NULL
发生错误时,参数将被设置为新的 GError 的地址;调用者将负责接管数据,并负责释放它。

返回值

类型: GThreadPool

新的 GThreadPool

数据由被调用函数拥有。