Atualizações HWGUI 31/10/2021

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

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

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

Small change for multithread only activated if use -DMT_EXPERIMENTAL
No change if do not compile using this parameter

Se compilar a HWGUI do jeito normal, continua tudo como antes, nada alterado.

Se compilar com -DMT_EXPERIMENTAL, é como existir uma HWGUI pra cada thread.

Divirtam-se testando as possibilidades.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

hwgui.png
Apenas exemplo.
Janelas ilimitadas gtwvg e dialogs hwgui modal rodando ao mesmo tempo.
Cada uma em uma thread.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »



Só pra curiosidade:
No browse é filtrando conforme digita, e são todas as cidades do Brasil.
MySQL + ADO
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

Se compilar com -DMT_EXPERIMENTAL, é como existir uma HWGUI pra cada thread.
Não expliquei direito:
Se GERAR a hwgui com esse parâmetro, a hwgui é gerada diferente.

Depois é só usar normal.

Na geração da hwgui: hbmk2 hwgui.hbp -DMT_EXPERIMENTAL
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

Importante avisar, muita atenção no uso:

Em uma nova thread, a primeira dialog obrigatoriamente tem que ser MODAL.
Ela precisa bloquear o andamento da thread logo de início.

Se criar a primeira dialog como NOMODAL, a falta do bloqueio vai fazer a janela sumir, e virar zumbi.
Nesse caso, só fechamento no gerenciador de tarefas.

Faltou meu teste com GUI, mas se for o caso, acrescente isto no fonte da janela multithread:

Código: Selecionar todos

hb_gtReload( HB_GTI_VERSION )
Isso acrescenta uma janela invisível da gt gui default do Harbour.
Se a DIALOG precisa bloquear alguma coisa, vai bloquear isso invisível.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

test.zip
(553.72 KiB) Baixado 148 vezes
Aqui minha compilação sempre empurra gtwvg, seja qual for o teste.

O exemplo do Itamar, agora abre janelas ilimitadas.
Só ficar clicando e vai abrindo janelas, cada uma em uma thread diferente.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

mt.png
Favor fazer o teste compilando no ambiente de vocês pra ver qual o comportamento em Windows e Linux.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

Nota:
Compilei sem manifest e sem assinatura.
É de se imaginar que vai ter o alerta do antivírus, como acontece com qualquer coisa baixada da internet sem isso.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

Itamar
teste direito isso.
Se tudo ok, poderemos ter testes mais interessantes, dispensando de toda hora ficar criando um menu só pro teste funcionar.

Importante:

Em multithread, no default, uma thread não enxerga nada da outra.
É necessário reconfigurar RDD, SET DATE, e outras coisas mais, em cada thread.

O lado bom, é poder abrir os mesmos arquivos sem se preocupar se já estão abertos, qual índice, qual posição, etc.
O lado ruim é se precisar de uma informação da outra thread, mas sempre tem jeito pra tudo.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Atualizações HWGUI 31/10/2021

Mensagem por Itamar M. Lins Jr. »

Olá!
Fiz teste no windows.
Precisa colocar hbmk2 -mt para funcionar, além de compilar a hwgui.hbp com -DMT_EXPERIMENTAL


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Atualizações HWGUI 31/10/2021

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Fiz teste no windows.
Precisa colocar hbmk2 -mt para funcionar, além de compilar a hwgui.hbp com -DMT_EXPERIMENTAL
Ok, pra funcionar multithread precisa multithread, normal.

A obrigatoriedade de -DMT_EXPERIMENTAL na hwgui, é pra evitar algum imprevisto em quem usa hwgui hoje.
Se tudo funcionar perfeito com hwgui compilada assim, é só liberar geral.

A única diferença é a forma de criar os arrays.
Sai o CLASSVAR, e entram os métodos.

Código: Selecionar todos

#ifdef MT_EXPERIMENTAL
   METHOD aDialogs          INLINE aDialogs()
   METHOD aModalDialogs     INLINE aModalDialogs()
#else
   CLASS VAR aDialogs       SHARED INIT {}
   CLASS VAR aModalDialogs  SHARED INIT {}
#endif
E entra um uso... que não sei se chamamos de normal, ou gambiarra:

Código: Selecionar todos

#ifdef MT_EXPERIMENTAL
   THREAD STATIC aDialogs := {}
   THREAD STATIC aModalDialogs := {}

   FUNCTION aDialogs()

      RETURN aDialogs

   FUNCTION aModalDialogs()

      RETURN aModalDialogs
#endif
A declaração THREAD STATIC torna a variável STATIC, com conteúdo visível em todo aplicativo, mas a declaração THREAD significa uma pra cada thread.
O uso diferente está na função, que equivale exatamente à variável.

Código: Selecionar todos

AAdd( aModalDialogs(), x )
hb_Adel( aModalDialogs(), x )
No exemplo acima é sem ser método, só pra ficar claro o uso fora do normal.
Variável STATIC é visível apenas no fonte onde foi criada.
Como a função fica no mesmo fonte da variável, ela enxerga a variável, e todo aplicativo enxerga a variável através da função.
No caso da HWGUI é exatamente isso, mas a variável continua sendo o método das classes.

Em resumo da minha alteração: apenas troquei o que era visível geral, por uma coisa que é visível por thread.
É como se fosse trocar uma variável PUBLIC por uma PRIVATE.

Se trabalhar sem multithread, como sempre foi, vai ser só uma variável, como sempre foi.
Se trabalhar com várias threads, que seria a novidade, automaticamente cada thread vai criar a sua variável.

Teoricamente não faz diferença pra hwgui em geral, mas nunca se sabe se pode aparecer algum imprevisto.

No uso prático, significa que em multithread teremos uma hwgui pra cada thread, uma não atrapalhando a outra.

Multithread é como vários EXEs separados.
Ao usar uma janela MODAL, um EXE não pode bloquear o outro.
E é exatamente isso que acontece com essa mudança, porque cada um tem sua própria lista de janelas.

Nada do outro mundo, apenas listas diferentes.

E é isso que permite misturar tudo que é GUI num EXE só, porque em cada thread usa o que quiser, pode até misturar a LIB com ela mesma.
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