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: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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