Page 1 of 1

Uma experiencia positiva com Multi-Thread

Posted: Sat Nov 13, 2010 11:28 am
by MGA
pessoal,
quero compartilhar com vocês uma experiência com THREAD que tive:

Tenho um sistema que usa uma função da DLL(micro-terminal gertec) para escrever na porta serial, até ai tudo bem, porem, quando tenho varios terminais e a função que escreve esta em uma thread, acontecia do sistema gerar um erro do windows e fechar.

EX:

...

define timer otimer of ownd interval 300 action(LerTerminal())

******************************************
function LerTerminal()
local x
aTerm:=TerminaisConectados()
for x:=1 to len(aTerm)
if IsValidThread( aTerm[x,16] ) //se o terminal esta imprimindo aguarda
loop
endif
...
if imprimir()
aTerm[x,16]:=StartThread(@Acionaextrato(),nID,aTerm[x,12])
endif
next

***********************************************
function AcionaExtrato(nID,aDadosImp)
local u
for u:=1 to len(adados)
mt_sendbinserial(nID,0,cDados,48) <---Gerava ERRO!!! :cry:
threadsleep(100)
next
threadsleep(100)
return nil



RESOLVIDO ASSIM:


GLOBAL pMutexaCons

...

pMutexaCons := HB_MutexCreate()

...

define timer otimer of ownd interval 300 action(LerTerminal())

******************************************
function LerTerminal()
local x
aTerm:=TerminaisConectados()
for x:=1 to len(aTerm)
if IsValidThread( aTerm[x,16] ) //se o terminal esta imprimindo aguarda
loop
endif
...
if imprimir()
aTerm[x,16]:=StartThread(@Acionaextrato(),nID,aTerm[x,12])
endif
next

***********************************************
function AcionaExtrato(nID,aDadosImp)
local u
for u:=1 to len(adados)
HB_MutexLock(pMutexaCons)
mt_sendbinserial(nID,0,cDados,48) <---AGORA OK :D
HB_MutexUnLock(pMutexaCons)
threadsleep(100)
next
threadsleep(100)
return nil


Espero que isso possa ajudar alguem.

Fiquem com Deus

Re: Uma experiencia positiva com Multi-Thread

Posted: Mon Nov 15, 2010 7:17 pm
by horacio
Interesante este aporte. Muchas gracias

Re: Uma experiencia positiva com Multi-Thread

Posted: Wed Nov 17, 2010 7:46 am
by Antonio Linares
Gracias por el ejemplo :-)

Re: Uma experiencia positiva com Multi-Thread

Posted: Wed Sep 04, 2013 8:46 pm
by vilian
Sgs,

Estou tentando usar Multithreads, mas não consigo resolver o seguinte problema:

- Enquanto o sistema está "Rodando", tudo vai bem - As chamadas as threads funcionam e o sistema faz exatamente o que era esperado.

- O problema ocorre apenas quando fecho a aplicação - Apararece uma mensagem de que o "sistema não está respondendo..." e logo em segiuda uma "APPCRASH"

Vc passou por isso ?

Re: Uma experiencia positiva com Multi-Thread

Posted: Wed Sep 04, 2013 9:05 pm
by MGA
Vilian,

você esta parando/encerrando a Thread antes de fechar a aplicação?

Re: Uma experiencia positiva com Multi-Thread

Posted: Thu Sep 05, 2013 12:47 am
by vilian
Sgs,

Sim, mas mesmo que nem execute a Thread, já gera o erro na saída, basta incluir as 2 libs para MT que na saída gera o problema.

Re: Uma experiencia positiva com Multi-Thread

Posted: Thu Sep 05, 2013 11:36 am
by MGA
vilian,

lembro que são mais libs, e de cabeça lembro que tem uma do BCC582 também. Confirme no forum quais são elas! Não estou perto dos fontes agora.

Re: Uma experiencia positiva com Multi-Thread

Posted: Thu Sep 05, 2013 11:51 am
by vilian
Sgg,

Já procurei em todo o forum e só encontrei orientação para usar a HBVMMT.LIB e CW32MT.LIB. Mas acho que deve ser algo na linkedição mesmo, uma vez que o problema aparece mesmo que a thread não seja executada - Basta incluir essas 2 libs no projeto que ao sair do sistema já aparece o APPCRASH.