fechar dialog "morta" em outra thread
Enviado: 28 Jan 2026 10:51
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.
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.
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
NÃO É FECHAR APLICATIVO.
É fechar somente a parte envolvida nesse processo específico.