errorsys: multithread e mix

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

errorsys: multithread e mix

Mensagem por JoséQuintas »

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:

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
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.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder