diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-08-22 21:38:30 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-08-22 21:38:30 (GMT) |
commit | 4fb2ac107092671fe27fc3ebf9fc86dff7c3ec19 (patch) | |
tree | 92cf5860302b4ba485c85fef3062f1179a978560 /src/glibext | |
parent | 0f73369ad9cd15cb17ae44aadfc035cb12778b93 (diff) |
Reorganized the global variables for the work queue singleton.
Diffstat (limited to 'src/glibext')
-rw-r--r-- | src/glibext/delayed.c | 74 | ||||
-rw-r--r-- | src/glibext/delayed.h | 10 |
2 files changed, 17 insertions, 67 deletions
diff --git a/src/glibext/delayed.c b/src/glibext/delayed.c index ddd84a0..6251766 100644 --- a/src/glibext/delayed.c +++ b/src/glibext/delayed.c @@ -31,6 +31,7 @@ #include "delayed-int.h" +#include "../gui/core/global.h" @@ -72,8 +73,6 @@ typedef struct _GWorkGroup wgroup_id_t id; /* Identifiant de travaux menés*/ - GtkStatusStack *status; /* Barre de statut principale */ - GDelayedWork *works; /* Tâches à mener à bien */ GMutex mutex; /* Verrou pour l'accès */ GCond cond; /* Réveil pour un traitement */ @@ -113,7 +112,7 @@ static void g_work_group_dispose(GWorkGroup *); static void g_work_group_finalize(GWorkGroup *); /* Crée un nouveau thread dédié à un type de travaux donné. */ -static GWorkGroup *g_work_group_new(wgroup_id_t, GtkStatusStack *); +static GWorkGroup *g_work_group_new(wgroup_id_t); /* Fournit l'identifiant associé à un groupe de travail. */ static wgroup_id_t g_work_group_get_id(const GWorkGroup *); @@ -143,11 +142,9 @@ struct _GWorkQueue { GObject parent; /* A laisser en premier */ - GtkStatusStack *status; /* Barre de statut principale */ - wgroup_id_t generator; /* Générateur d'identifiants */ - GWorkGroup **groups; /* Files de traitement */ + GWorkGroup **groups; /* Files de traitement */ size_t groups_count; /* Nombre de files internes */ GMutex mutex; /* Verrou pour l'accès */ @@ -446,8 +443,6 @@ static void g_work_group_dispose(GWorkGroup *group) for (i = 0; i < group->threads_count; i++) g_thread_join(group->threads[i]); - g_object_unref(group->status); - while (!dl_list_empty(group->works)) { work = group->works; @@ -490,8 +485,7 @@ static void g_work_group_finalize(GWorkGroup *group) /****************************************************************************** * * -* Paramètres : type = type dont seront marqués tous les travaux donnés. * -* status = barre de statut à tenir informée. * +* Paramètres : type = type dont seront marqués tous les travaux donnés. * * * * Description : Crée un nouveau thread dédié à un type de travaux donné. * * * @@ -501,7 +495,7 @@ static void g_work_group_finalize(GWorkGroup *group) * * ******************************************************************************/ -static GWorkGroup *g_work_group_new(wgroup_id_t id, GtkStatusStack *status) +static GWorkGroup *g_work_group_new(wgroup_id_t id) { GWorkGroup *result; /* Traiteur à retourner */ @@ -509,12 +503,6 @@ static GWorkGroup *g_work_group_new(wgroup_id_t id, GtkStatusStack *status) result->id = id; - if (status != NULL) - { - result->status = status; - g_object_ref(status); - } - return result; } @@ -582,6 +570,7 @@ static void g_work_group_schedule(GWorkGroup *group, GDelayedWork *work) static void *g_work_group_process(GWorkGroup *group) { GDelayedWork *work; /* Traitement à mener */ + GtkStatusStack *status; /* Zone d'info éventuelle */ while (1) { @@ -601,7 +590,8 @@ static void *g_work_group_process(GWorkGroup *group) g_mutex_unlock(&group->mutex); - g_delayed_work_process(work, group->status); + status = get_global_status(); + g_delayed_work_process(work, status); g_object_unref(G_OBJECT(work)); @@ -774,8 +764,6 @@ static void g_work_queue_dispose(GWorkQueue *queue) { size_t i; /* Boucle de parcours */ - g_object_unref(G_OBJECT(queue->status)); - g_mutex_lock(&queue->mutex); for (i = 0; i < queue->groups_count; i++) @@ -814,53 +802,21 @@ static void g_work_queue_finalize(GWorkQueue *queue) /****************************************************************************** * * -* Paramètres : status = barre de statut à tenir informée. * -* * -* Description : Procède au chargement du gestionnaire d'analyse différées. * -* * -* Retour : true pour indiquer un chargement réussi, false sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool init_work_queue(GtkStatusStack *status) -{ - GWorkQueue *queue; /* Singleton à mettre en place */ - - queue = g_object_new(G_TYPE_WORK_QUEUE, NULL); - - queue->status = status; - - if (status != NULL) - g_object_ref(G_OBJECT(queue->status)); - - if (queue != NULL) - _get_work_queue(queue); - - return (queue != NULL); - -} - - -/****************************************************************************** -* * -* Paramètres : queue = nouveau gestionnaire à mémoriser ou NULL. * +* Paramètres : - * * * -* Description : Fournit le gestionnaire de traitements parallèles courant. * +* Description : Créé un nouveau gestionnaire de tâches parallèles. * * * -* Retour : Gestionnaire de traitements parallèles courant. * +* Retour : Gestionnaire de traitements mis en place. * * * * Remarques : - * * * ******************************************************************************/ -GWorkQueue *_get_work_queue(GWorkQueue *queue) +GWorkQueue *g_work_queue_new(void) { - static GWorkQueue *result = NULL; /* Singleton à retourner */ + GWorkQueue *result; /* Instance à retourner */ - if (queue != NULL) - result = queue; + result = g_object_new(G_TYPE_WORK_QUEUE, NULL); return result; @@ -900,7 +856,7 @@ static GWorkGroup *g_work_queue_ensure_group_exists(GWorkQueue *queue, wgroup_id queue->groups = (GWorkGroup **)realloc(queue->groups, queue->groups_count * sizeof(GWorkGroup *)); - result = g_work_group_new(id, queue->status); + result = g_work_group_new(id); queue->groups[queue->groups_count - 1] = result; } diff --git a/src/glibext/delayed.h b/src/glibext/delayed.h index 277d958..d3e084d 100644 --- a/src/glibext/delayed.h +++ b/src/glibext/delayed.h @@ -86,17 +86,11 @@ typedef unsigned long long wgroup_id_t; #define DEFAULT_WORK_GROUP 0 -#define get_work_queue() _get_work_queue(NULL) - - /* Indique le type défini pour le gestionnaire des travaux différés. */ GType g_work_queue_get_type(void); -/* Procède au chargement du gestionnaire d'analyse différées. */ -bool init_work_queue(GtkStatusStack *); - -/* Fournit le gestionnaire de traitements parallèles courant. */ -GWorkQueue *_get_work_queue(GWorkQueue *); +/* Créé un nouveau gestionnaire de tâches parallèles. */ +GWorkQueue *g_work_queue_new(void); /* Constitue un nouveau groupe de travail. */ wgroup_id_t g_work_queue_define_work_group(GWorkQueue *); |