Consumo de CPU

Consumo de CPU

Postby leandro » Sat Jun 15, 2019 12:26 pm

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 view

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1669
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Consumo de CPU

Postby Antonio Linares » Sun Jun 16, 2019 5:26 am

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
Antonio Linares
Site Admin
 
Posts: 42060
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Consumo de CPU

Postby leandro » Mon Jun 17, 2019 5:24 pm

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1669
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Consumo de CPU

Postby karinha » Mon Jun 17, 2019 5:37 pm

Intenta asi:

Code: Select all  Expand view

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

Re: Consumo de CPU

Postby leandro » Mon Jun 17, 2019 6:05 pm

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1669
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Consumo de CPU

Postby karinha » Mon Jun 17, 2019 6:14 pm

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

Re: Consumo de CPU

Postby cnavarro » Mon Jun 17, 2019 6:17 pm

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
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Consumo de CPU

Postby leandro » Tue Jun 18, 2019 10:37 pm

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1669
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Consumo de CPU

Postby cnavarro » Tue Jun 18, 2019 11:50 pm

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
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Consumo de CPU

Postby leandro » Wed Jun 19, 2019 3:30 pm

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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1669
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 52 guests