hwgui com thread ou background

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

enakamatu
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 12 Nov 2006 09:47

hwgui com thread ou background

Mensagem por enakamatu »

Srs,

Preciso montar uma aplicacao com hwgui utilizando thread, funciona +/- assim:

- abre a jabela com 3 botoes e um editbox, botoes start/pause/stop.
- botao start, inicia o processo, atulizando um contador demonstrado no editbox(variavel publica);
- botao pause, deixa com .f. uma variavel publica quedesvia o laco do programa rodando no threadl, nao deixando atualizar o editbox
- botao stop, modifica a variavel publica .continua para .f. ,forcando a saida do laco do thread e finalizando o mesmo.

Consegui montar, compila beleza, mas qdo dou um start na thread, o programa fica congelado, nao da erro.

Alguem pode me ajudar?

eduardo
[]~
Eduardo Nakamatu
Gestão e Tecnologia
Avatar do usuário
binho_fasa
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 06 Jul 2004 12:53
Localização: Brazil
Contato:

Mensagem por binho_fasa »

Amigo, tente usar Thread. Não é difícil implementar. Veja a baixo as dicas para você conseguir compilar usando multi threading:

PUBLIC lParar, Pausa

lParar := .f.

StartThreading(@Contador())

(...) // Continuacao do programa
BUTTON "PAUSAR" ACTION {|| Pausar() }
BUTTON "PARAR" ACTION {|| Paratudo() }


//No final do .PRG, coloque essa função para o sistema aguardar a finalização de todas as threadings em execução.
WaitForThreads()

//final



***********
FUNCTION Contador()
LOCAL nContador := 1

While !lParar
If lPausar
nContador ++
(...) // Executa os comandos
Endif
ThreadSleep(2000) // Similar a Inkey()
End While

RETURN .T.


**************
FUNCTION Pausar()

If lPausar
lPausar := .F.
Else
lPausar := .T.
Endif

RETURN .T.


**************
FUNCTION Paratudo()

lParar := .T.

RETURN .T.



Para conseguir linkar, vc terá que adicionar as libs do xharbour para multithreading que tem o mt. Veja a lista abaixo. Creio que com elas vc conseguirá gerar o .EXE:

hwguimt.lib
rddmt.lib
common.lib
dbfcdxmt.lib
dbffptmt.lib
dbfntxmt.lib
vmmt.lib
hbsixmt.lib
ctmt.lib
rtlmt.lib
cw32mt.lib // Essa lib está em \BORLAND\BCC55\LIB
macromt.lib
lang.lib
ppmt.lib

Faça alguns testes e nos informe sobre os problemas.Se puder, baixe os fontes do CVS do xharbour e de uma olhada na pasta tests, tem alguns exemplos pra você dar uma olhada. Os arquivos de exemplo iniciam com MT*.PRG

Abraços
Avatar do usuário
binho_fasa
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 06 Jul 2004 12:53
Localização: Brazil
Contato:

Corrigindo...

Mensagem por binho_fasa »

Somente corrigindo, a função correta é StartThread( ) e não StartThreading( )


Abraços
Responder