Le premier site francophone dédié au développement Pocket PC


Le contrôle liaison série (partie 3)
 
   

 

Partie 3

Gérer le timeout

Il ne faut JAMAIS attendre indéfiniment l'arrivée de caractères, on doit toujours se donner une limite de temps (raisonnable) pour ne pas risquer de bloquer l'application. L'idéal est de surveiller le nombre de caractères dans le buffer d'entrée et si le nombre attendu n'est pas atteint au bout du délais que l'on s'est donné, on considère que la communication a échoué, on dit qu'elle est en Timeout (temps dépassé).

Même si le contrôle de communication série gère en tâche de fond les réceptions et les envois de caractères, il ne faut pas croire que vous allez pouvoir gérer votre communications série de manière totalement asynchrone. L'idéale est d'écrire une fonctions dont le rôle et d'attendre un certain temps l'arrivée d'un caractère. Ainsi il est très simple de gérer le timeout.

Il faut qu'en même surveiller ce qui se présente

Le principe et de surveiller l'arrivée d'un caractère dans le buffer de réception et aussi de surveiller le temps qui passe. Pour cela nous avons besoin de déclarer 2 APIs :

Public Declare Function GetTickCount Lib "coredll" () As Long
Public Declare Sub Sleep Lib "Coredll" (ByVal dwMilliseconds As Long)

Le paramètre 'Timeout' est exprimé en 1/1000ème de seconde, donc, si vous voulez attendre le caractère 3 secondes, il faut donner au paramètre 'Timeout' la valeur 3000. Dans cet exemple, le contrôle de liaison série s'appelle 'Comm1'

Private Function GetChar(ByVal Timeout As Long) As String
 Dim t As Long
 Dim d As Long
 If Comm1.InBufferCount = 0 Then
  t = GetTickCount()
  Do While Comm1.InBufferCount = 0
   d = GetTickCount() - t
   If d >= Timeout Then Exit Function
   Call Sleep(50)
  Loop
 End If
 Comm1.InputLen = 1
 GetChar = Comm1.Input
End Function       

La fonction retourne le caractère reçu ou une chaine vide en cas de dépassement du temps imparti.
A chaque 'tour', l'application se met en sommeil (instruction sleep) pendant 50/1000ème se secondes afin de donner 'un peu d'air' au système, pour ne pas utiliser trop le processeur et rendre le Pocket PC saccadé.

Voila, cette série d'articles sur la liaison série s'achève. Vous êtes normalement prêt à vous lancer dans ce genre de développement. Il faut tout de même que je vous avoue qu'à chaque fois qu'il y a de la liaison série dans un développement, je sais, par expérience, que les problèmes commencent, car ce n'est vraiment pas simple à utiliser.

 

       

Stéphane Sibué

 
       
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.