Página 1 de 1

fechar dialog "morta" em outra thread

Enviado: 28 Jan 2026 10:51
por JoséQuintas
GTWVG, FIVEWIN, HWGUI e multithread.
Acho que sou o único com esse uso fora do normal, mas não custa perguntar.

Cada coisa roda em sua thread, tudo ok.

Num uso específico, uso GTWVG numa thread, atualizando a dialog FIVEWIN em outra thread.
Tudo bem, a não ser quando dá erro em GTWVG, erro não controlável, por exemplo erro de internet/MySQL, quando o provedor entra em manutenção.
Apesar dos testes, eventualmente escapa erro, mesmo que seja uma vez por mês, atrapalha, principalmente numa rede onde o gerenciador de tarefas está bloqueado para o usuário.
A dialog FIVEWIN fica zumbi, não tem mais aplicativo, só tem a dialog que não responde a comando nenhum.

Por enquanto, minha única idéia é usar uma rotina antiga.
Ela fica testando uma thread, e se fecha se a thread indicada fechou.
No caso, acrescentaria aí pra fechar a dialog fivewin.

Código: Selecionar todos

CREATE CLASS RunWhileThreadClass

   VAR lExit        INIT .F.
   VAR nThreadId
   VAR nInterval    INIT 600
   VAR cWindowTitle INIT ""
   VAR bCode
   METHOD New()     INLINE ::nThreadId := hb_ThreadSelf(), SELF
   METHOD Execute( bCode )

   ENDCLASS

METHOD Execute( bCode ) CLASS RunWhileThreadClass

   LOCAL nCont

   hb_gtReload( "WVG" )
   IF bCode != Nil
      ::bCode := bCode
   ENDIF
   AppInitSets()
   HB_GtInfo( HB_GTI_WINTITLE, ::cWindowTitle )
   //wvgSetAppWindow():Hide()
   DO WHILE ! ::lExit
      Eval( ::bCode )
      FOR nCont = 1 TO ::nInterval
         //hb_ReleaseCPU()
         IF hb_ThreadWait( ::nThreadId, 0.1, .T. ) == 1
            ::lExit := .T.
         ENDIF
         Inkey(1)
         IF ::lExit
            EXIT
         ENDIF
      NEXT
   ENDDO
   //hb_gcAll(.T.)

   RETURN Nil
Alguém tem alguma outra idéia, sem ser criar thread adicional?

NÃO É FECHAR APLICATIVO.
É fechar somente a parte envolvida nesse processo específico.

Re: fechar dialog "morta" em outra thread

Enviado: 28 Jan 2026 11:14
por Kapiaba
Dia Quintas, este código que você postou, é para controlar a rotina em FIVEWIN, ou para a outra biblioteca W.. não sei o que?

Seria interessante você postar a ROTINA QUE CONGELA(em FIVEWIN), ela está redonda mesmo?

Regards, saludos.

Re: fechar dialog "morta" em outra thread

Enviado: 28 Jan 2026 15:04
por JoséQuintas
A rotina tem dependências.

Considere o seguinte:
Tem uma dialog fivewin, ela apenas é aberta.
Tem as rotinas GTWVG, elas enviam comandos pra essa dialog, e fazem todo processo de "navegação".
Ao dar erro, a dialog fivewin continua lá, mas como não faz nada sozinha, continua lá.

Acho que encontrei uma saída, mas falta oportunidade de teste.
O VALID da dialog é o que impedia de fechar.
Acrescentei um teste no valid, pra testar se a thread gtwvg ainda está rodando.
Pelo menos fechar no "X" deixa de ser bloqueado.