Como seria isto sem multithread?

Projeto MiniGui - 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

Como seria isto sem multithread?

Mensagem por JoséQuintas »

Como seria feita a mesma coisa sem usar multihread?
Quais as alterações necessárias nos fontes?

Nota: Compilei usando HMG Extended modificada
Anexos
phone.zip
(690.05 KiB) Baixado 168 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/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Como seria isto sem multithread?

Mensagem por asimoes »

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?
►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)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como seria isto sem multithread?

Mensagem por JoséQuintas »

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....
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Como seria isto sem multithread?

Mensagem por asimoes »

Ok.

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)
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Como seria isto sem multithread?

Mensagem por Nascimento »

JoséQuintas Nota: Compilei usando HMG Extended modificada
que você modificou?
e quais as modificações
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como seria isto sem multithread?

Mensagem por JoséQuintas »

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.
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/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como seria isto sem multithread?

Mensagem por Claudio Soto »

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
Jose, la teoria es lo siguiente.

La funcion main quedaria algo asi como:

Código: Selecionar todos

Public nCont := 0
for i := 1 to 5
 HmgMain(i)
next
ACTIVATE WINDOW ALL

Mintras 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
Se agregan dos funciones nuevas

Código: Selecionar todos

function opendbf
   nCont++
   if nCont == 1
      OpenPhoneDB()
   endif
return

function closedbf
   nCont--
   if nCont == 0
      CLOSE DATABASES
   endif
return

Se debe cambiar todas las referencias en forma de pseudo oop por las funciones set/getproperty y domethod, ej.

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" )
   ...
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como seria isto sem multithread?

Mensagem por Claudio Soto »

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:

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
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.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como seria isto sem multithread?

Mensagem por JoséQuintas »

Nesse caso não alterei pra STATIC, continua PUBLIC.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como seria isto sem multithread?

Mensagem por JoséQuintas »

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.
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/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como seria isto sem multithread?

Mensagem por Claudio Soto »

Hay que usar el dbf como si fuese en red.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como seria isto sem multithread?

Mensagem por JoséQuintas »

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.
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/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como seria isto sem multithread?

Mensagem por Claudio Soto »

Creo que no causaria ningun problema porque antes de salir HMG hace un DbCloseAll
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Responder