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!!!
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
HB_MutexUnLock(pMutexaCons)
threadsleep(100)
next
threadsleep(100)
return nil
Espero que isso possa ajudar alguem.
Fiquem com Deus