Como salir de un READCOMM con un timer

Como salir de un READCOMM con un timer

Postby JmGarcia » 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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Como salir de un READCOMM con un timer

Postby karinha » 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
User avatar
karinha
 
Posts: 7416
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Como salir de un READCOMM con un timer

Postby karinha » Mon Feb 25, 2013 12:56 pm

Yo hago asi usando HBCOMM.LIB
Code: Select all  Expand view

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
User avatar
karinha
 
Posts: 7416
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Como salir de un READCOMM con un timer

Postby Antonio Linares » Mon Feb 25, 2013 3: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: Select all  Expand view
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: Select all  Expand view
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
User avatar
Antonio Linares
Site Admin
 
Posts: 41441
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Como salir de un READCOMM con un timer

Postby devtuxtla » 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.
devtuxtla
 
Posts: 392
Joined: Tue Jul 29, 2008 1:55 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: FranciscoA, Google [Bot] and 73 guests