speedy's image Licence 2ème année - Projet OcamlPilot
Last update: 25-11-2023
1.Nouvelles fraîches 
2.Présentation générale
3.Présentation du jeu
4.Les exécutables d'OcamlPilot(d)
5.Les énoncés de TP
6.Les tailles des objets graphiques
7.Ressources
8.Env de développement
9.Le protocole d'OcamlPilot
10.Coding style
11.Le Plan du cours
12.Evaluation des projets
13.Foire Aux Questions

Valid XHTML 1.0! Valid CSS!
13. Foire Aux Questions

Question : L'affichage de mon client clignote

Il faut utiliser le double buffering. Sous OCaml, il suffit d'effectuer l'application auto_synchronize false. Attention : il faut faire le auto_synchronize false APRES avoir ouvert la fenêtre graphique. Si vous fermez puis réouvrez la fenêtre OCaml, il faut à nouveau réeffectuer le auto_synchronize false.

Question : Je tape des commandes dans mon client mais il ne réagit pas

Assurez-vous que la souris se trouve bien dans la fenêtre graphique Ocaml. En effet, même si la fenêtre OCaml est sélectionnée, si la souris n'est pas dans la fenêtre, les événements de la souris ne sont pas capturés et rien ne se passe. En revanche, si la souris est bien dans la fenêtre, les événements sont capturés et le client réagit.

Question : Je n'arrive pas à utiliser aide_tp2 et aide_client sous emacs

Il semble en effet qu'il y ait un problème entre le buffer d'évaluation d'emacs et la fonction aide_connexion : en effet, celle-ci nécessite que l'utilisateur entre au clavier la couleur de son vaisseau spatial. Or, dans le buffer d'évaluation, ce que rentre l'utilisateur est considéré par défaut comme une commande à envoyer à OCaml et non comme ce que l'utilisateur fournit à la fonction aide_connexion. Pour qu'emacs comprenne qu'il s'agit de la chaîne attendue par aide_connexion, il suffit de taper sur la touche «entrée» du pavé numérique et non sur le «retour charriot» comme vous le faites habituellement. Une autre alternative consisterait à lancer dans une console le mytop que vous avez téléchargé dans la page des ressources. Vous pouvez alors faire des copier/coller pour transférer vos fonctions de la fenêtre emacs vers le mytop.

Question : Les output_string out_channel "GET..." n'ont aucun effet

Il y a au moins deux explications plausibles à cela : tout d'abord, il se peut que vous n'ayez pas terminé votre chaîne de caractères avec "\r\n". Si vous n'écrivez pas le "\n" final, le serveur ne reçoit pas la chaîne car celui-ci effectue des input_line pour voir ce que vous lui demandez. Or, sans le "\n", la ligne n'est pas terminée et donc le serveur est toujours en attente. La bonne ligne à donner au serveur est donc :

output_string out_channel "GET CUBES\r\n";;

La deuxième explication tient au fait que les entrées/sorties sont bufferisées. Après avoir effectué un output_string out_channel "GET CUBES\r\n";;, le client n'emet rien du tout vers le serveur, il se contente juste de remplir un buffer. Comme celui-ci n'est pas assez plein, rien n'est transmis au serveur. Pour obliger la transimission, c'est-à-dire le vidage du buffer, il faut faire :

flush out_channel;;


Question : Je n'arrive pas à utiliser les threads dans mytop

mytop a été créé pour supporter les threads. Plus exactement, il a été généré de la manière suivante :

ocamlmktop -custom -thread -o mytop unix.cma graphics.cma threads.cma ocamlpilot_stub.o aide_client.cmo

Toutefois, quand on lance mytop et qu'on fait un open Thread ou bien un open Mutex, il arrive qu'ocaml vous réponde que ce module est « unbound ». Cela peut provenir du fait que les modules Threads et Mutex ne sont pas dans le répertoire standard d'ocaml mais dans le sous-répertoire threads. Pour indiquer à mytop de chercher les modules aussi dans ce répertoire, lancez mytop de la manière suivante :

mytop -I +threads






Licence 2ème année - Projet OcamlPilot