Clipper On Line • Ver Tópico - Como seria isto sem multithread?

Como seria isto sem multithread?

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Como seria isto sem multithread?

Mensagempor JoséQuintas » 27 Fev 2017 15:47

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 98 vezes
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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como seria isto sem multithread?

Mensagempor asimoes » 27 Fev 2017 19:59

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

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Como seria isto sem multithread?

Mensagempor JoséQuintas » 27 Fev 2017 20:27

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, 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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como seria isto sem multithread?

Mensagempor asimoes » 27 Fev 2017 22:32

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

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Como seria isto sem multithread?

Mensagempor Nascimento » 28 Fev 2017 00:19

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

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Como seria isto sem multithread?

Mensagempor JoséQuintas » 28 Fev 2017 00:46

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, 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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como seria isto sem multithread?

Mensagempor Claudio Soto » 28 Fev 2017 00:49

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:

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


Mintras que la funcion:

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

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.

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

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Como seria isto sem multithread?

Mensagempor Claudio Soto » 28 Fev 2017 00:56

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

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Como seria isto sem multithread?

Mensagempor JoséQuintas » 28 Fev 2017 07:40

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, 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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como seria isto sem multithread?

Mensagempor JoséQuintas » 01 Mar 2017 09:30

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, 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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como seria isto sem multithread?

Mensagempor Claudio Soto » 01 Mar 2017 10:35

Hay que usar el dbf como si fuese en red.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

Como seria isto sem multithread?

Mensagempor JoséQuintas » 01 Mar 2017 12:31

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, 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: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como seria isto sem multithread?

Mensagempor Claudio Soto » 01 Mar 2017 13:52

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

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 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