
Dimanche 10 Janvier 1999

Arash Habibi

Repertoire TimeoutSpecifique


Programmes HDLC et medium
Une nouvelle version permettant des timeout 
multiples qui ne soient pas desamorces par 
n'importe quel evenement. 


I. Contenu du programme

Ce programme est identique a celui que vous avez 
eu auparavant a ceci pres que : 

- Il y a un module en plus Timer.c (et Timer.h)

- Le module Attente.c (et Attente.h) a ete entierement modifie
  Notamment la fonction Attendre a un parametre de plus permettant
  d'attendre les timeouts multiples. 

- Les modules main.c et Liaison.c (et Liaison.h) ont ete plus
  legerement modifies. Toutes les lignes modifiees commencent 
  par un commentaire vide : /**/
  
- Le module Medium.c a aussi ete legerement modifie pour tenir 
  compte d'un changement de notation. 
  
  
  
II. Mode d'emploi des timeouts multiples
  
  Le fonctionnement des timeout individuels est montre par 
  la fonction DemoTimeout dans le module Liaison.c. 
  Si vous voulez regarder ce fonctionnement sortez l'appel
  de cette fonction des commentaires.
  
II.1. Pour armer un timeout
  
  Pour lancer un timeout, il suffit de faire 
  
  	StartATimer(1, 2.0);
  
  Cet appel arme le timeout numero 1 avec une duree de 2 secondes. 
  Nous pouvons en lancer plusieurs, avec des durees quelconques 
  (strictement positives) et avec des numeros quelconques (strictement
  positifs). 
  
  	StartATimer(5, 0.05);
	StartATimer(2, 10.1);
	
  Ces deux appels arment le timeout numero 5 et le timeout numero 2
  de durees respectives 0.05 secondes et 10.1 secondes. 
  
II.2. Pour desamorcer un timeout

  Contrairement au vieux timeout, ceux-ci ne sont pas desamorces
  par l'arrive de n'importe quelle trame ou de n'importe quel 
  paquet. Il faut explicitement les desamorcer avec la fonction 
  StopTimer(id). Par exemple pour desamorcer le timeout numero 5, 
  on fait l'appel suivant : 
  
  	StopTimer(5);
	
II.3. Lorsqu'expire un timeout
	
  Lorsque la duree d'un timeout est ecoule, alors le numero de 
  ce timeout est ecrit dans le tube TubeTimeout. Ainsi en 
  incluant TubeTimeout comme parametre de la fonction Attendre, 
  on peut etre averti lorsqu'un des timeout est expire. 
  Lorsque plusieurs timeout expirent en meme temps, tous les 
  numeros sont ecrits dans le meme tube. 
  
  Pour lire dans le tube, on utilise la fonction 
  
  	GetNextExpiredTimerID(int desc_tube);
	
  qui rend le numero du premier timeout dans le tube. 
  
II.4. Pour connaitre l'etat des timeouts

  L'etat des timeouts en cours (non desamroces) est affiche
  par l'appel de la fonction :
  
  	CheckTimers("L'etat des timers apres le premier appel");
	
  Dans le cas ou cette fonction est appelee plusieurs fois, 
  le commentaire permet de distinguer les differents appels. 

II.5. Le vieux timeout (desamorcable par n'importe quel 
  evenement reste. 






















	
	
