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
hwgui com thread ou background
Moderador: Moderadores
- binho_fasa
- Usuário Nível 2

- Mensagens: 93
- Registrado em: 06 Jul 2004 12:53
- Localização: Brazil
- Contato:
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
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
- binho_fasa
- Usuário Nível 2

- Mensagens: 93
- Registrado em: 06 Jul 2004 12:53
- Localização: Brazil
- Contato:
