/* Chrysalide - Outil d'analyse de fichiers binaires * queue.c - mise en place des mécanismes de traitements parallèles * * Copyright (C) 2018 Cyrille Bagard * * This file is part of Chrysalide. * * Chrysalide is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Chrysalide is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Chrysalide. If not, see . */ #include "queue.h" #include #include "global.h" /****************************************************************************** * * * Paramètres : - * * * * Description : Met en place les mécanismes de traitements parallèles. * * * * Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ bool init_global_works(void) { GWorkQueue *queue; /* Singleton pour tâches */ #ifndef NDEBUG wgroup_id_t expected; /* Identifiant gloabl attendu */ #endif queue = g_work_queue_new(); set_work_queue(queue); #ifndef NDEBUG expected = g_work_queue_define_work_group(queue); assert(expected == DEFAULT_WORK_GROUP); #else g_work_queue_define_work_group(queue); #endif #ifndef NDEBUG expected = g_work_queue_define_work_group(queue); assert(expected == LOADING_WORK_GROUP); #else g_work_queue_define_work_group(queue); #endif return true; } /****************************************************************************** * * * Paramètres : - * * * * Description : Supprime les mécanismes de traitements parallèles. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void exit_global_works(void) { GWorkQueue *queue; /* Singleton pour tâches */ queue = get_work_queue(); g_object_unref(G_OBJECT(queue)); } /****************************************************************************** * * * Paramètres : - * * * * Description : Attend que toutes les tâches de tout groupe soient traitées. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void wait_for_all_global_works(void) { GWorkQueue *queue; /* Singleton pour tâches */ static const wgroup_id_t group_ids[] = { DEFAULT_WORK_GROUP, LOADING_WORK_GROUP }; queue = get_work_queue(); g_work_queue_wait_for_all_completions(queue, group_ids, GLOBAL_WORK_GROUPS_COUNT); }