Threads » History » Version 4

« Previous - Version 4/6 (diff) - Next » - Current version
Alejandro Motta Cano, 03/23/2015 07:19 PM


Threads
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.
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.
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.
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 à associer la mémoire vive de l’ordinateur à l’espace temporaire du disque dur . Or dans le cas des threads, se sont plusieurs processus qui partage la même mémoire allouée.  

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.

Schéma thread :
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 : 
pthread_t objetThreadServeur;
Cette fonction crée un objet de type pthread_t, c’est à dire un thread. Ensuite nous allons la lier à une fonction avec ceci :
pthread_create(&objetThreadServeur, NULL, threadServeur, (void*)NULL);
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.
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.
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.