Struct

GLibStaticPrivate

Description

struct GStaticPrivate {
  /* No available fields */
}

A GStaticPrivate works almost like a GPrivate, but it has one significant advantage. It doesn’t need to be created at run-time like a GPrivate, but can be defined at compile-time. This is similar to the difference between GMutex and GStaticMutex.

Now look at our give_me_next_number() example with GStaticPrivate:

  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;
  }

Instance methods

g_static_private_free

Releases all resources allocated to private_key.

g_static_private_get

Works like g_private_get() only for a GStaticPrivate.

g_static_private_init

Initializes private_key. Alternatively you can initialize it with G_STATIC_PRIVATE_INIT.

g_static_private_set

Sets the pointer keyed to private_key for the current thread and the function notify to be called with that pointer (NULL or non-NULL), whenever the pointer is set again or whenever the current thread ends.