Página 2 de 2

CPU 100% com o HARBOUR

Enviado: 04 Mai 2010 22:26
por Pablo César
Acho que o inkey() sem parametro, também iria ajudar. E eu experimentaria fazê-lo da mesma forma que a exibição do progress bar, cada 50, 100, 1000 (como tinha indicado acima).

Re: CPU 100% com o HARBOUR

Enviado: 04 Mai 2010 22:45
por Maligno
Inkey() não se destina exatamente a produzir delay. O mais apropriado é Millisec(), que é parte da biblioteca do [x]Harbour, aliás.

Re: CPU 100% com o HARBOUR

Enviado: 05 Mai 2010 08:58
por levis_me
Com o inkey(.01) rodou um pouco melhor, mas ainda não atende a necessidade, pois a qtd de numeros que geralmente preciso é 1 milhão, por isso fica muito lento.
Mais baixo q isso, ex: inkey(0.001) o programa não roda...

Somente com o inkey() o processamento fica a 100%.

Millisec() também não compilou.

A versão que estou usando é Harbour MiniGUI IDE (c) 2004-2007 - Versão 2.0.031a
gtProcessMessages() - não compila (undefined reference to 'HB_FUN_GTPROCESSMESSAGES')
NextKey() - idem inkey(), não muda o processamento.

Em todos os testes a tela do programa "congela"....

Re: CPU 100% com o HARBOUR

Enviado: 05 Mai 2010 10:41
por sygecom
Essa versão ai deve ser da Minigui e não do Harbour, atualize seu Harbour para a versão mais atual e use:

#include "hbcompat.ch"
gtProcessMessages()

Re: CPU 100% com o HARBOUR

Enviado: 05 Mai 2010 15:34
por Itamar M. Lins Jr.
Melhor usar o Harbour com MT.
Faz isso sem carregar o processador, essa sua rotina deve está lendo um número muito grande registros.
Veja:

Código: Selecionar todos

FunctionMain
nH1:=hb_idleAdd( {||MynhaFuncaoA()})
nH2:=hb_idleAdd( {||MynhaFuncaoB()})

.....
? HB_IDLESTATE(nH1)
? HB_IDLESTATE(nH2)

HB_IDLEDEL( nH1 )
HB_IDLEDEL( nH2 )
return

Function MinhaFuncaoA
 Do While !eof() //clientes
    dbskip()
    hb_idleSleep(0.2) // pode ser também hb_releaseCPU()
  EndDo

Function MinhaFuncaoB //receber
 Do While !eof()
    dbskip()
    hb_idleSleep(0.2) // pode ser também hb_releaseCPU()
  EndDo
Se não precisar de MT tente o hb_releaseCPU() ou hb_idleSleep(0.2) dentro do "Do While" ou "For Next"

Saudações,
Itamar M. Lins Jr.