-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
124 lines (97 loc) · 3.85 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <stdio.h>
#include <stdlib.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include "utilitaires/aleatoire.h"
#include "mutex/avions/mutex_avions_struct.h"
#include "arguments/argument_thread_struct.h"
#include "arguments/argument_thread_avion.h"
#include "tarmac/tarmacInitialiser.h"
#include "utilitaires/erreur.h"
#include "thread/thread_lib.h"
#include "avion/avionThread.h"
#include "controleur/controleurThread.h"
#include "tarmac/tarmacAfficher.h"
#include "affichage/affichage_fonction_variable.h"
#include "tarmac/tarmacAjouterAffichage.h"
#include "arguments/argumentAvionCopier.h"
#include <signal.h>
// j'ai besoin de quelques choses :
// la stucture des arguments généraux
// le mutex général est dedans mais pas besoin de l'initialiser
argument_thread_struct mesArguments;
// la structure des arguments d'avions
argument_thread_avion arguments[NB_AVIONS];
// il nous fout des structures de thread pour les avions
thread_struct mesAvions[NB_AVIONS];
// et une structure de thread pour notre controleur
thread_struct monControleur;
// affichage
affichage_struct *teteAffichage;
void arreterFileMessages() {
// supprimer la file de message
if(msgctl(mesArguments.idFileMsgAvions, IPC_RMID, 0) == -1) {
erreur("Erreur lors de la suppression de la file ");
}
}
// on est prudent, on met un traitant pour sigint
void traitantSigint(int num) {
if(num == SIGINT) {
// tuer les threads
for (int i = 0; i < NB_AVIONS; ++i) {
threadTuer(&mesAvions[i]);
}
// détruire les avions
for(int i = 0; i < NB_AVIONS; ++i) {
avionDetruire(mesArguments.mutexAvions.mesAvions[i]);
}
threadTuer(&monControleur);
arreterFileMessages();
erreur("Terminaison programme");
}
}
int main (int argc, char *argv[]) {
initAleatoire(); // on initialise l'aléatoire
// on initialiser les mutex et les conditions
/*mesArguments.mutexAvions.mutex = (pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER;
mesArguments.mutexAvions.avionsPrets = (pthread_cond_t) PTHREAD_COND_INITIALIZER;
mesArguments.mutexAvions.avionQuelconque = (pthread_cond_t) PTHREAD_COND_INITIALIZER;
for(int i = 0; i < NB_AVIONS; ++i) {
mesArguments.mutexAvions.conditionsAvion[i] = (pthread_cond_t) PTHREAD_COND_INITIALIZER;
}
mesArguments.mutexAvions.atterissageForce = (pthread_cond_t) PTHREAD_COND_INITIALIZER;
mesArguments.mutexAvions.nbAvionsPrets = 0;*/
// initialiser les arguments généraux
tarmacInitialiser(&mesArguments.monTarmac);
// initialiser mes pistes
pisteInitialiser(&mesArguments.mesPistes[0], true);
pisteInitialiser(&mesArguments.mesPistes[1], false);
// on ajoute les pistes à l'affichage
affichageAjouter(&teteAffichage, &mesArguments.mesPistes[0].affichage);
affichageAjouter(&teteAffichage, &mesArguments.mesPistes[1].affichage);
// on ajoute le tarmac à l'affichage
tarmacAjouterAffichage(&teteAffichage, &mesArguments.monTarmac);
// on affiche nos pistes et notre tarmac
affichageNettoyerEcran();
pisteAfficher(&mesArguments.mesPistes[0]);
pisteAfficher(&mesArguments.mesPistes[1]);
tarmacAfficher(&mesArguments.monTarmac);
// démarrer tous les threads des avions
for(int i = 0; i < NB_AVIONS; ++i) {
mesAvions[i].fonction = avionThread;
arguments[i].argumentsThread = &mesArguments;
arguments[i].index = i;
argument_thread_avion *arg = &arguments[i];
lancerThread(&mesAvions[i], (void *) arg);
}
// démarrer le thread du contrôleur
monControleur.fonction = controleurThread;
lancerThread(&monControleur, (void *) &mesArguments);
// attendre tous les threads
for(int i = 0; i < NB_AVIONS; ++i) {
threadAttendre(&mesAvions[i]);
}
threadAttendre(&monControleur);
arreterFileMessages();
return EXIT_SUCCESS;
}