结构

GLibStaticPrivate

说明 [源代码]

struct GStaticPrivate {
  /* No available fields */
}

GStaticPrivate 的工作方式几乎与 GPrivate 相同,但它有一个显著优势。它不需要像 GPrivate 那样在运行时创建,而是在编译时定义。这类似于 GMutexGStaticMutex 之间的区别。

现在,看看我们使用 GStaticPrivategive_me_next_number() 示例

  int
  give_me_next_number ()
  {
    static GStaticPrivate current_number_key = G_STATIC_PRIVATE_INIT;
    int *current_number = g_static_private_get (&current_number_key);

    if (!current_number)
      {
        current_number = g_new (int, 1);
        *current_number = 0;
        g_static_private_set (&current_number_key, current_number, g_free);
      }

    *current_number = calc_next_number (*current_number);

    return *current_number;
  }

实例方法

g_static_private_free

释放分配给 private_key 的所有资源。

g_static_private_get

仅对 GStaticPrivate 起作用,作用与 g_private_get() 相同。

g_static_private_init

初始化 private_key。或者,你可以使用 G_STATIC_PRIVATE_INIT 初始化它。

g_static_private_set

为当前线程设置以 private_key 为键的指针,并设置函数 notify,以便每当再次设置该指针或当前线程结束时,都会使用该指针(NULL 或非 NULL)调用该函数。