errorsys: multithread e mix
Enviado: 05 Mar 2025 14:07
Fazer mix é interessante.
Você tem uma rotina GTWVG.
Essa rotina GTWVG chama uma rotina FIVEWIN.
Mas dá erro...
Vém a rotina de erros da HWGUI !!!!
Parece doido, mas é interessante isso.
Vamos endoidar mais:
Não tem nada doido, é relativamente normal.
Em fase de testes, vamos colocando as necessidades.
Depois no uso normal, fazemos rotinas pra reduzir fonte.
O que acontece ?
É uma chamada multithread fora da rotina normal de chamadas. Preciso trocar a errorsys dessa thread.
E a dialog fivewin ?
Ela tem lá o VALID ::lCanClose, não vai deixar fechar, MESMO SE DER ERRO
Então acrescento na rotina de erros pra fazer isso, alterando o codeblock, e não mexendo no fonte errorsys.prg.
Como eu disse, parece doido, mas é relativamente normal.
Faltou dizer:
É MULTITHREAD.
O menu chama um módulo. deu erro. o módulo é fechado.
O menu e outros módulos continuam funcionando.
É diferente das rotinas de erro normais das LIBs gráficas, que fecham todo aplicativo.
Estranhei que só neste fonte é que entrou a errorsys da hwgui, talvez a chamada extra multithread.
Só forçar o uso da minha nos meus fontes.
Nota:
A errorsys é definida ao chamar Errorsys()
O harbour faz isso no início do aplicativo.
Não tenho certeza em multithread.
E muito menos quando se juntam LIBs que tem errorsys própria.
A única certeza é que se defino o codeblock pra erro no meu fonte, é ele que vai ser usado.
Você tem uma rotina GTWVG.
Essa rotina GTWVG chama uma rotina FIVEWIN.
Mas dá erro...
Vém a rotina de erros da HWGUI !!!!
Parece doido, mas é interessante isso.
Vamos endoidar mais:
Código: Selecionar todos
#include "fivewin.ch"
PROCEDURE ze_fwTextMsg
LOCAL oDlgMsg, nCont
hb_ThreadStart( { || ;
ErrorBlock( { | e | JoseQuintasError( e ) } ), ;
oDlgMsg := DlgTextMsgClass():New(), ;
oDlgMsg:bCodeBlock := { || MsgExclamation( "ok" ) }, ;
oDlgMsg:Execute() } )
ErrorBlock( { | e | oDlgMsg:lCanClose := .T., oDlgMsg:End(), JoseQuintasError( e ) } )
Inkey(2)
FOR nCont = 1 TO 50
oDlgMsg:ShowText( "Test " + Ltrim( Str( nCont ) ) )
oDlgMsg:nGAtual += 2
oDlgMsg:ShowMeter( oDlgMsg:nGAtual )
Inkey(0.5)
NEXT
MsgExclamation( "End" )
oDlgMsg:lCanClose := .T.
oDlgMsg:End()
RETURN
Em fase de testes, vamos colocando as necessidades.
Depois no uso normal, fazemos rotinas pra reduzir fonte.
O que acontece ?
É uma chamada multithread fora da rotina normal de chamadas. Preciso trocar a errorsys dessa thread.
E a dialog fivewin ?
Ela tem lá o VALID ::lCanClose, não vai deixar fechar, MESMO SE DER ERRO
Então acrescento na rotina de erros pra fazer isso, alterando o codeblock, e não mexendo no fonte errorsys.prg.
Como eu disse, parece doido, mas é relativamente normal.
Faltou dizer:
É MULTITHREAD.
O menu chama um módulo. deu erro. o módulo é fechado.
O menu e outros módulos continuam funcionando.
É diferente das rotinas de erro normais das LIBs gráficas, que fecham todo aplicativo.
Estranhei que só neste fonte é que entrou a errorsys da hwgui, talvez a chamada extra multithread.
Só forçar o uso da minha nos meus fontes.
Nota:
A errorsys é definida ao chamar Errorsys()
O harbour faz isso no início do aplicativo.
Não tenho certeza em multithread.
E muito menos quando se juntam LIBs que tem errorsys própria.
A única certeza é que se defino o codeblock pra erro no meu fonte, é ele que vai ser usado.