Clipper On Line • Ver Tópico - Atualizações HWGUI 31/10/2021

Atualizações HWGUI 31/10/2021

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 31 Out 2021 04:57

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 31 Out 2021 05:02

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 31 Out 2021 05:25



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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 31 Out 2021 09:51

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 01 Nov 2021 10:43

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:

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 01 Nov 2021 10:54

test.zip
(553.72 KiB) Baixado 30 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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 01 Nov 2021 10:56

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 01 Nov 2021 11:03

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 01 Nov 2021 11:28

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Atualizações HWGUI 31/10/2021

Mensagempor Itamar M. Lins Jr. » 01 Nov 2021 11:43

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Atualizações HWGUI 31/10/2021

Mensagempor JoséQuintas » 01 Nov 2021 12:27

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.

#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:

#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.

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro