Consumo de CPU

Post Reply
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Consumo de CPU

Post by leandro »

Buenos días para todos,

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


//----------------------------------------------------------------//
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

Image

Después de correr proceso

Image
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
Antonio Linares
Site Admin
Posts: 42512
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Consumo de CPU

Post by Antonio Linares »

Leandro,

Si no corres ese proceso, desaparece ese consumo ?

Prueba a poner una llamada a SysRefresh() dentro del bucle
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Consumo de CPU

Post by leandro »

Antonio buenos días

Si no corres ese proceso, desaparece ese consumo ?

Exacto, sin el proceso el consumo es del 0.87%, prácticamente nada.

Prueba a poner una llamada a SysRefresh() dentro del bucle

Agregue sysrefresh(), pero el consumo sigue muy alto.

Code: Select all | Expand

//----------------------------------------------------------------//
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
   SysRefresh()
NEXT
Return aDisponible
 


Image
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
karinha
Posts: 7932
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Consumo de CPU

Post by karinha »

Intenta asi:

Code: Select all | Expand


FUNCTION CommTest()

   LOCAL cP, cR, j, i
   LOCAL aSpd := { '9600' }

   LOCAL aDisponible := {}
   LOCAL aNoDisponible := {}

   HB_GCALL( .F. )

   FOR i = 1 TO 4

      SYSREFRESH()

      cP := LTrim( Str( i ) )

      IF Empty( CommOpen( cP, aSpd[ 1 ] ) )

         CloseComm( nComm )

         FOR j = 1 TO Len( aSpd )

            SYSREFRESH()

            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
 


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Consumo de CPU

Post by leandro »

karinha, Gracias por responder

Si bajo una gran cantidad (56%), pero me sigue pareciendo alto el consumo, que opinas?

Image
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
karinha
Posts: 7932
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Consumo de CPU

Post by karinha »

Leandro como haces la llamada a CommTest()?? és um WHILE... ENDDO??

Muestra...
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Consumo de CPU

Post by cnavarro »

Leandro, pocas veces he utilizado este tema y además hace mucho tiempo, pero me llama la atención que abras y cierres con distinto handle, quizás se quede abierto, aunque seguramente no tenga nada que ver con el tema que te ocupa.


cR := CommOpen( cP, aSpd[ j ] ) // Aqui es cR

IF Empty( cR )
aadd( aDisponible, cP )
ELSE
aadd( aNoDisponible, cR )
ENDIF

CloseComm( nComm ) // Aqui es nComm

Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Consumo de CPU

Post by leandro »

Cristobal gracias por la sugerencia, quedo corregido :D

Pero tienes razón, el problema persiste. :(
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Consumo de CPU

Post by cnavarro »

leandro wrote:Cristobal gracias por la sugerencia, quedo corregido :D

Pero tienes razón, el problema persiste. :(


Revisa todo tu código, para que no quede ningún handle abierto
Quieres decir que el consumo, después de haber arreglado lo anterior, es el mismo que antes?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Consumo de CPU

Post by leandro »

Exactamente el mismo :(
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
Post Reply