Como seria isto sem multithread?
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como seria isto sem multithread?
Como seria feita a mesma coisa sem usar multihread?
Quais as alterações necessárias nos fontes?
Nota: Compilei usando HMG Extended modificada
Quais as alterações necessárias nos fontes?
Nota: Compilei usando HMG Extended modificada
- Anexos
-
phone.zip- (690.05 KiB) Baixado 169 vezes
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/
Como seria isto sem multithread?
Quintas,
Perguntas:
1-Qual versão da minigui você está usando
2-Este exemplo você compilou com a Minigui Extended com mingw ou bcc 5?
Perguntas:
1-Qual versão da minigui você está usando
2-Este exemplo você compilou com a Minigui Extended com mingw ou bcc 5?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como seria isto sem multithread?
Aqui só uso Harbour 3.4, então pras LIBs resta usar mingw.
Esse exemplo está na pasta \hmgs\samples\applications\phone_book
Mas tanto minha HMG Extended 17.01 quanto esse exemplo estão modificados.
A HMG Extended original não aceita isso de multithread.
A minha só pra testes....
Esse exemplo está na pasta \hmgs\samples\applications\phone_book
Mas tanto minha HMG Extended 17.01 quanto esse exemplo estão modificados.
A HMG Extended original não aceita isso de multithread.
A minha só pra testes....
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/
Como seria isto sem multithread?
Ok.
Você gerou as libs com mingw ?
Tem como você mostrar como gerou as libs?
Você gerou as libs com mingw ?
Tem como você mostrar como gerou as libs?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Como seria isto sem multithread?
que você modificou?JoséQuintas Nota: Compilei usando HMG Extended modificada
e quais as modificações
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como seria isto sem multithread?
Se quiser usar diferente do uso oficial, usei estes BATs, que já comentei por aqui
https://github.com/JoseQuintas/AllGui/tree/master/bat
Valem pra oficial também.
Só lembrando:
Qualquer compilação com Harbour é indicar pastas dos #include (arquivos ch e arquivos h) e pastas de lib.
Fiz algo como isto, em cada pasta: hbmk2 *.prg *.c *.rc -onomelib -hblib
E no uso, indicar a lista dessas libs que foram geradas, e pastas CH.
mgconfig.bat é o que vai mexer, pra indicar aonde estão suas pastas.
mgcreate é o que cria as libs
mgcompile é o que usa pra compilar, e já acrescenta a lista de pastas
Em mgcompile, adiciona/retira o que é mais comum, pra ter menos adicionais na hora de compilar.
Aqui criei em uma pasta que está no path arquivos intermediários com mesmo nome chamando esses, assim não precisei path adicional.
https://github.com/JoseQuintas/AllGui/tree/master/bat
Valem pra oficial também.
Só lembrando:
Qualquer compilação com Harbour é indicar pastas dos #include (arquivos ch e arquivos h) e pastas de lib.
Fiz algo como isto, em cada pasta: hbmk2 *.prg *.c *.rc -onomelib -hblib
E no uso, indicar a lista dessas libs que foram geradas, e pastas CH.
mgconfig.bat é o que vai mexer, pra indicar aonde estão suas pastas.
mgcreate é o que cria as libs
mgcompile é o que usa pra compilar, e já acrescenta a lista de pastas
Em mgcompile, adiciona/retira o que é mais comum, pra ter menos adicionais na hora de compilar.
Aqui criei em uma pasta que está no path arquivos intermediários com mesmo nome chamando esses, assim não precisei path adicional.
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/
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
Como seria isto sem multithread?
Jose, la teoria es lo siguiente.JoséQuintas escreveu:Como seria feita a mesma coisa sem usar multihread?
Quais as alterações necessárias nos fontes?
Nota: Compilei usando HMG Extended modificada
La funcion main quedaria algo asi como:
Código: Selecionar todos
Public nCont := 0
for i := 1 to 5
HmgMain(i)
next
ACTIVATE WINDOW ALLMintras que la funcion:
Código: Selecionar todos
PROCEDURE HMGMain ( i )
local name := "MD_Form_"+hb_ntos(i)
SET NAVIGATION EXTENDED
SEt WINDOW MAIN OFF
SET DELETED ON
//OpenPhoneDB()
DEFINE WINDOW &name ;
AT 10, 10 ;
WIDTH 800 ;
HEIGHT 600 ;
TITLE "Phone book" ;
ICON "phone" ;
ON INIT ( opendbf(), RefreshWinPhone( _sort , name ) ) ;
ON RELEASE closedbf()
...
END WINDOW
CENTER WINDOW &name
// ACTIVATE WINDOW MD_Form_1
RETURN
Código: Selecionar todos
function opendbf
nCont++
if nCont == 1
OpenPhoneDB()
endif
return
function closedbf
nCont--
if nCont == 0
CLOSE DATABASES
endif
return
Código: Selecionar todos
PROCEDURE RefreshWinPhone ( _x1, name ) // ademas se agrega como parametro el nombre de la ventana
...
// MD_Form_1.MD_Grid_1.DeleteAllItems()
DoMethod( name, "MD_Grid_1", "DeleteAllItems" )
...
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
Como seria isto sem multithread?
Jose, para que veas los inconvenientes que crea tener una MiniGui por theread, agregale un boton a cada ventana de manera que al presionar cualquiera de ellos todas las ventanas se minimizan.
En forma convencional esto se hace como:
Si cambiaste _HMG_SYSDATA de publica a THREAD STATIC o haces que los thread no hereden las variables publicas, cuando clicas en el boton "min all" se va a minimizar solo la venta de ese thread y no todas como deberia.
En forma convencional esto se hace como:
Código: Selecionar todos
...
@ 0, 0 BUTTON minwin CAPTION "min all" ACTION minall() // colocar esto dentro del Define Windows en la función HMGMain
...
function minall
for k := 1 to len ( _HMG_SYSDATA [ 67 ] )
minimize( _HMG_SYSDATA [ 67 ] [k] )
next
return
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como seria isto sem multithread?
Nesse caso não alterei pra STATIC, continua PUBLIC.
O funcionamento é independente.
O ZIP contém um EXE, pode confirmar a reação.
O funcionamento é independente.
O ZIP contém um EXE, pode confirmar a reação.
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
Como seria isto sem multithread?
Esqueci de dizer: o seu exemplo é equivalente em visual, mas não em resultado prático.
Uma janela interfere na outra, porque estão usando as mesmas áreas de DBF.
Talvez tenha que fazer com DBFs igual com formulário... usar nomes diferentes.
E aí que está... ficar inventando coisas que multithread já faz.
Uma janela interfere na outra, porque estão usando as mesmas áreas de DBF.
Talvez tenha que fazer com DBFs igual com formulário... usar nomes diferentes.
E aí que está... ficar inventando coisas que multithread já faz.
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/
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Como seria isto sem multithread?
Também, mas acho que não percebeu justamente o que considero vantagem.
Duas janelas HMG:
Alterou a posição do registro atual, pronto, alterou o registro atual da outra janela também.
Alterou o índice atual, pronto, alterou de todas as janelas.
Resta fixar numa única janela, ou criar vários ALIAS conforme a janela.
O que se multiplica se forem usadas sub-janelas.
Ao passo que usando multithread, isso fica simplificado, pode-se usar o próprio nome do arquivo, nem precisa inventar alias.
O DBF tem esse inconveniente, que não acontece em conexão MySQL, por exemplo.
Foi justamente por isso que comecei a usar multithread: abrem-se janelas à vontade, sem se preocupar com os DBFs.
Aliás.... falando nisso... não sei se o fechamento da HMG causaria problema aos arquivos/índices abertos em threads diferentes.
Duas janelas HMG:
Alterou a posição do registro atual, pronto, alterou o registro atual da outra janela também.
Alterou o índice atual, pronto, alterou de todas as janelas.
Resta fixar numa única janela, ou criar vários ALIAS conforme a janela.
O que se multiplica se forem usadas sub-janelas.
Ao passo que usando multithread, isso fica simplificado, pode-se usar o próprio nome do arquivo, nem precisa inventar alias.
O DBF tem esse inconveniente, que não acontece em conexão MySQL, por exemplo.
Foi justamente por isso que comecei a usar multithread: abrem-se janelas à vontade, sem se preocupar com os DBFs.
Aliás.... falando nisso... não sei se o fechamento da HMG causaria problema aos arquivos/índices abertos em threads diferentes.
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/
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
Como seria isto sem multithread?
Creo que no causaria ningun problema porque antes de salir HMG hace un DbCloseAll