Consumo de CPU

Post Reply
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
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

//----------------------------------------------------------------//
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 ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
User avatar
Antonio Linares
Site Admin
Posts: 37485
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
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: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
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

//----------------------------------------------------------------//
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 ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Consumo de CPU

Post by karinha »

Intenta asi:

Code: Select all

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
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
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 ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

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

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
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
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 ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Consumo de CPU

Post by leandro »

Exactamente el mismo :(
Saludos
LEANDRO ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
Post Reply