FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como salir de un READCOMM con un timer
Posts: 654
Joined: Mon May 29, 2006 03:14 PM
Como salir de un READCOMM con un timer
Posted: Mon Feb 25, 2013 12:07 PM
Me encuentro con el problema de que cuando estoy a la espera de un ReadComm(<nComm>,@<cBuffer>) y no se reciben datos por el puerto serie el programa se queda "cuajado".

En TCP se puede usar un INetSetTimeout(<pSocket>,<nMilliSeconds>) para salirse de un INetDGramRecv(<pSocket>,@<cBuffer>,[<nBytes>]) en un ntiempo dado si no se reciben datos.

¿ Alguna idea ?
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Como salir de un READCOMM con un timer
Posted: Mon Feb 25, 2013 12:48 PM

Holá, una duda -> problemas con el idioma.

Cuajado és: Inmóvil, paralizado por el asombro que produce alguna cosa??

Podrias muestrar una imágen?

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Como salir de un READCOMM con un timer
Posted: Mon Feb 25, 2013 12:56 PM
Yo hago asi usando HBCOMM.LIB
Code (fw): Select all Collapse
FUNCTION FECHA_LEITOR()

   oTimerVendas:Deactivate()

   Fechar_Porta()

RETURN( .T. )

FUNCTION Fechar_Porta()

   Fechar_Leitura()

RETURN NIL

FUNCTION Fechar_Leitura()

RETURN UNINT_PORT(nComm)



João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Como salir de un READCOMM con un timer
Posted: Mon Feb 25, 2013 03:01 PM
JM,

Efectivamente la función ReadComm() de FWH entra en un bucle mientras lee y no se contempla un tiempo de espera máximo.

Aqui está corregida. Por favor pruébala y me comentas que tal, gracias

ReadComm(<nComm>,@<cBuffer> [,<nTimeout>] )

Code (fw): Select all Collapse
short int ReadComm( LPCOMDATA pComm, char far * lpvBuf, short int cbRead, int iMilliSeconds )
{
   short int read;
   clock_t time = clock();

   for( read = 0; read < cbRead && pComm->comtailbuf != pComm->comheadbuf; read++ )
   {
      if( iMilliSeconds && ( ( ( clock() - time ) > iMilliSeconds ) > 60 ) )
        exit;
    
      lpvBuf[ read ] = pComm->combuf[ pComm->comtailbuf ];
      pComm->comtailbuf++;
      if( pComm->comtailbuf > COMBUFSIZE - 1 )
         pComm->comtailbuf = 0;
   }

   return read;
}


y el wrapper para alto nivel:
Code (fw): Select all Collapse
HB_FUNC( READCOMM ) //  ( nId, @ cBuffer ) --> nBytesRead
{
     #ifndef __FLAT__
      hb_retni( ReadComm( hb_parnl( 1 ), hb_parc( 2 ), hb_parclen( 2 ) ) );
   #else   
      hb_retni( ReadComm( ( LPCOMDATA ) hb_parnl( 1 ), ( char * ) hb_parc( 2 ), ( short int ) hb_parclen( 2 ),
                hb_parnl( 3 ) ) );
   #endif   
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 392
Joined: Tue Jul 29, 2008 01:55 PM
Re: Como salir de un READCOMM con un timer
Posted: Fri Jun 14, 2013 12:33 AM

Hola Antonio.

Me podrias ayudar para implementar esta solucion del READCOMM en mi programa para xHarbour?

Como lo incluyo para compilarlo ?

Gracias por tu ayuda

Saludos

Visite Chiapas, el paraiso de México.

Continue the discussion