GLib.Once¶
Fields¶
Name |
Type |
Access |
Description |
---|---|---|---|
retval |
r/w |
the value returned by the call to the function, if status is |
|
status |
r/w |
the status of the |
Methods¶
class |
|
class |
|
class |
|
class |
|
class |
|
Details¶
- class GLib.Once¶
A
GLib.Once
struct controls a one-time initialization function. Any one-time initialization function must have its own uniqueGLib.Once
struct.New in version 2.4.
- classmethod init_enter(location)[source]¶
- Parameters:
location (
object
) – location of a static initializable variable containing 0- Returns:
True
if the initialization section should be entered,False
and blocks otherwise- location:
location of a static initializable variable containing 0
- Return type:
Function to be called when starting a critical initialization section. The argument location must point to a static 0-initialized variable that will be set to a value other than 0 at the end of the initialization section. In combination with
GLib.Once.init_leave
() and the unique address value_location, it can be ensured that an initialization section will be executed only once during a program’s life time, and that concurrent threads are blocked until initialization completed. To be used in constructs like this:static gsize initialization_value = 0; if (g_once_init_enter (&initialization_value)) { gsize setup_value = 42; // initialization code here g_once_init_leave (&initialization_value, setup_value); } // use initialization_value here
While location has a
volatile
qualifier, this is a historical artifact and the pointer passed to it should not bevolatile
.New in version 2.14.
- classmethod init_enter_pointer(location)[source]¶
- Parameters:
location (
object
) – location of a static initializable variable containingNULL
- Returns:
True
if the initialization section should be entered,False
and blocks otherwise- Return type:
This functions behaves in the same way as
GLib.Once.init_enter
(), but can can be used to initialize pointers (or #guintptr) instead of #gsize.static MyStruct *interesting_struct = NULL; if (g_once_init_enter_pointer (&interesting_struct)) { MyStruct *setup_value = allocate_my_struct (); // initialization code here g_once_init_leave_pointer (&interesting_struct, g_steal_pointer (&setup_value)); } // use interesting_struct here
New in version 2.80.
- classmethod init_leave(location, result)[source]¶
- Parameters:
- Returns:
location of a static initializable variable containing 0
- Return type:
location:
object
Counterpart to
GLib.Once.init_enter
(). Expects a location of a static 0-initialized initialization variable, and an initialization value other than 0. Sets the variable to the initialization value, and releases concurrent threads blocking inGLib.Once.init_enter
() on this initialization variable.While location has a
volatile
qualifier, this is a historical artifact and the pointer passed to it should not bevolatile
.New in version 2.14.
- classmethod init_leave_pointer(location, result)[source]¶
- Parameters:
Counterpart to
GLib.Once.init_enter_pointer
(). Expects a location of a staticNULL
-initialized initialization variable, and an initialization value other thanNULL
. Sets the variable to the initialization value, and releases concurrent threads blocking inGLib.Once.init_enter_pointer
() on this initialization variable.This functions behaves in the same way as
GLib.Once.init_leave
(), but can be used to initialize pointers (or #guintptr) instead of #gsize.New in version 2.80.