Threads » History » Version 2

Kevin Jabaud, 03/23/2015 07:14 PM

1 1 Alejandro Motta Cano
h1. Threads
2 1 Alejandro Motta Cano
	Après avoir obtenu un serveur fonctionnel, il nous fallait l’implémenter directement dans la simulation pour que cette dernière le lance et l’utilise pour récupérer les données envoyées par l’application Java. 
3 1 Alejandro Motta Cano
	Pour pouvoir utiliser notre serveur directement avec la simulation et sans  devoir le lancer manuellement à côté, il nous a fallut trouver une solution. En l’incluant simplement dans le code de la simulation,le serveur bloque cette dernière. Il la bloque car en l’incluant directement dans le code, le programme reste sur le serveur et son exécution. La suite de la simulation n’est pas exécutée.
4 1 Alejandro Motta Cano
	Nous avons donc cherché une solution et avons choisis d’utiliser les threads. Ces derniers permettent l’ exécution de plusieurs tâches en parallèle et sont simples à utiliser. 
5 1 Alejandro Motta Cano
	Un thread est un processus dit léger. Pour le comprendre il faut s’imaginer que chaque processus exécutés possèdent sa propre « mémoire virtuelle ». La mémoire virtuelle est un principe qui a été inventé dans les année 60 et qui consiste à associé la mémoire vive de l’ordinateur à l’espace temporaire du disque dur . Hors dans le cas des threads, se sont plusieurs processus qui partage la même mémoire allouée.  
6 2 Kevin Jabaud
7 2 Kevin Jabaud
    Schéma thread :
8 1 Alejandro Motta Cano
!http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Multithreaded_process.svg/220px-Multithreaded_process.svg.png!
9 1 Alejandro Motta Cano
10 1 Alejandro Motta Cano
Voici un petit schéma pour aider à la compréhension. On peut clairement y voir le rond représentant la « mémoire virtuelle » et les divers threads (processus léger). Ces derniers utilisent tout les deux la même mémoire virtuelle, celle du processus qui a lancé les threads. 
11 1 Alejandro Motta Cano
12 1 Alejandro Motta Cano
13 1 Alejandro Motta Cano
14 1 Alejandro Motta Cano
	Dans notre cas précis, il a suffit de lier le serveur à la simulation en incluant le fichier .h lié à notre serveur. Ensuite nous avons crée un thread contenant la fonction main du serveur. Pour pouvoir utiliser le thread, il faut tout d’abords le créer avec cette fonction : 
15 1 Alejandro Motta Cano
	pthread_t objetThreadServeur;
16 1 Alejandro Motta Cano
Cette fonction crée un objet de type pthread_t, c’est à dire un thread. Ensuite nous allons la lié à une fonction avec ceci : 
17 1 Alejandro Motta Cano
	 pthread_create(&objetThreadServeur, NULL, threadServeur, (void*)NULL);
18 1 Alejandro Motta Cano
 Cette fonction lie notre thread à une fonction à exécuter, dans notre cas la fonction s’appelle threadServeur et lance la fonction main du serveur. Le serveur est donc bien lancé en parallèle de notre simulation. 
19 1 Alejandro Motta Cano
	Pour finir correctement la jonction de notre simulation et du serveur, il a fallut rajouter un dernier thread . Il a pour but de lire en continue un tableau de caractère contenant les instructions récupérées par le serveur. Pour cela on utilise les mêmes fonctions que celle expliquées ci dessus à une exception prés. Nous ne lançons pas le main du serveur, mais une autre fonction qui à pour but de remplir le tableau de caractère. 
20 1 Alejandro Motta Cano
21 1 Alejandro Motta Cano
	C’est à ce moment là malheureusement que nous avons une erreur que nous n’avons pas réussis à corriger. Le lancement du thread de récupération des données faire quitter l’application d’un seul coup.