En los ejemplos que vienen en fw, hay unas funciones que verifican que puertos COM (seriales) estan activos, la compile y funciona de maravilla, la idea es detectar el puerto COM y guárdalo en una DBF, al inicio de la aplicación. En teoria hago eso, pero el problema radica en que parece que algo queda activo durante todo el tiempo que la aplicación está abierta y ese proceso consume toda la CPU del PC. ¿alguien a tenido el mismo problema?
- Code: Select all Expand view RUN
//----------------------------------------------------------------//
Function CommTest()
LOCAL cP, cR, j, i
LOCAL aSpd := { '9600' }
LOCAL aDisponible:={}
LOCAL aNoDisponible:={}
FOR i = 1 TO 4
cP := LTrim( Str( i ) )
IF Empty( CommOpen( cP, aSpd[ 1 ] ) )
CloseComm( nComm )
FOR j = 1 TO Len( aSpd )
cR := CommOpen( cP, aSpd[ j ] )
IF Empty( cR )
aadd(aDisponible,cP)
ELSE
aadd(aNoDisponible,cR)
ENDIF
CloseComm( nComm )
NEXT
ELSE
aadd(aNoDisponible,cP)
ENDIF
NEXT
Return aDisponible
//----------------------------------------------------------------//
Function CommOpen ( cPort, cSpeed )
LOCAL cDcb, cRv := '', cS := 'COM' + cPort + ':' + cSpeed + ',n,8,1'
nComm := OpenComm( 'COM' + cPort, 1024 , 128 )
IF nComm >= 0
IF BuildCommDcb( cS, @cDcb )
#ifdef __CLIPPER__
IF SetCommState( cDcb )
#else
IF SetCommState( nComm, cDcb )
#endif
cRv := ''
ELSE
cRv := 'Failed to SetCommState on COM' + cPort + ' at ' + cSpeed
ENDIF
ELSE
cRv := 'Failed to BuildCommDCB on COM' + cPort + ' at ' + cSpeed
ENDIF
ELSE
cRv := 'Failed to find COM' + cPort
ENDIF
Return cRv
Antes de Lanzar el proceso
Después de correr proceso