Atualizações HWGUI 31/10/2021
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
Apenas exemplo.
Janelas ilimitadas gtwvg e dialogs hwgui modal rodando ao mesmo tempo.
Cada uma em uma thread.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
Não expliquei direito:Se compilar com -DMT_EXPERIMENTAL, é como existir uma HWGUI pra cada thread.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
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:
Isso acrescenta uma janela invisível da gt gui default do Harbour.
Se a DIALOG precisa bloquear alguma coisa, vai bloquear isso invisível.
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 )
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
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.
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/
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/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Atualizações HWGUI 31/10/2021
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.
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.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Atualizações HWGUI 31/10/2021
Ok, pra funcionar multithread precisa multithread, normal.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
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
Código: Selecionar todos
#ifdef MT_EXPERIMENTAL
THREAD STATIC aDialogs := {}
THREAD STATIC aModalDialogs := {}
FUNCTION aDialogs()
RETURN aDialogs
FUNCTION aModalDialogs()
RETURN aModalDialogs
#endif
O uso diferente está na função, que equivale exatamente à variável.
Código: Selecionar todos
AAdd( aModalDialogs(), x )
hb_Adel( aModalDialogs(), x )
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/
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/