Clipper On Line • Ver Tópico - StartThread()

StartThread()

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

StartThread()

Mensagempor JoséQuintas » 10 Ago 2020 23:39

Um jeito legal de trabalhar com multithread é usando CLASSE.
Isso permite conversa entre threads.
Não o fonte exato, apenas aproximado, pra dar uma idéia.

ExecutaAguarda( { || Seila() } )

FUNCTION ExecutaAguarda( bCode )

o := ProcessoClass():New()
o:Block := bCode
hb_TheadStart( { || o:Execute() } )
DO WHILE ! o:Acabou
   Inkey(0.3)
ENDDO
RETURN NIL

CREATE CLASS ProcessoClass

   VAR Acabou INIT .F.
   VAR Block INIT {}
   METHOD Execute() INLINE Eval( ::Block ), ::Acabou := .T.
ENDCLASS
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

StartThread()

Mensagempor asimoes » 11 Ago 2020 09:37

JoséQuintas escreveu:Eu comecei usando temporário em DBF, e é muita perda de tempo mesmo.
A consulta ao SQL é 1 segundo, e pra gravar em DBF pode demorar vários minutos.


Eu não uso DBF, uso Hash table, tudo em memória
â–º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

StartThread()

Mensagempor leandrolinauer » 15 Ago 2020 09:14

Bom dia aSimoes.
Estou migrando para SQL meu sistema e necessito de algo tipo o que tenho com DBF usando TBBROWSE no estilo dbedit() genérico, mas só funciona com DBF, não com array, não consegui fazer um generico para ler array, vc tem um exemplo genérico desta função para abrir qualquer forma de visualização com pesquisa de dados em array?

Eu consegui até alguma coisa passando de SQL para DBF para usar a função genérica e usando thread consegui abrir enquanto ele busca os dados para visualizar, mas agora estou apanhando para fazer algo com que já mostre o que buscou enquanto busca mais dados, para a tela não ficar vazia.

Rodo a pesquisa na função de usuário do dbedit colocando ela em uma variavel publica e executando com aeval()

Se há alguma outra forma de se fazer esta função para usar em array e com pesquisa instantânea, é o que estou tentando fazer e não consegui ainda.

Fico grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 16 Out 2006 10:59
Cidade/Estado: Paranaíba-MS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes

StartThread()

Mensagempor JoséQuintas » 15 Ago 2020 19:25

Se for ADO.....

rs := conexao:Execute( "SELECT ...." )

isso trás os registros, se forem 200.000 registros é instantâneo, ou quase.
Usando AdUseClient, isso se torna LOCAL.

rs:Filter = "NOME LIKE '%JO%'"
O filtro é instantâneo, porque tudo é LOCAL
Vai ficar lento talvez acima de 500.000 registros ou 1 milhão de registros, foi o máximo que testei, coisa de 1 segundo ou 2 pra cada tecla digitada.
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

StartThread()

Mensagempor asimoes » 15 Ago 2020 19:45

Leandro, eu faço como o Quintas postou, com o resultset você pode alimentar um array, uma hashtable, para exibir em uma grid da hwgui, minigui ou tbrowse do tipo array, se vc for adicionar o resultset em um dbf, serão 2 processamentos, como também será para hashtable, isso depende do exibidor (dbedit, browse, etc) que você irá utilizar
â–º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

StartThread()

Mensagempor leandrolinauer » 17 Ago 2020 08:44

Bom dia.
Este é o problema mesmo, estou jogando em DBF porque já tenho um TBROWSE para dbf, não tenho um TBROWSE para array genérico, tipo, mando uma matriz com o nome dos campos, mascara e titulo e os mesmos são montados automaticamente no TbColumnNew(), claro vou tentar mas para o projeto de migração continuar, achei mais fácil jogar tudo em um DBF temporário, já consegui e com THREAD(), estou tentando fazer ele atualizar a cada registro e mostrar na tela enquanto o teclado fica livre para digitar, mas não consegui ainda.

Grato
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 16 Out 2006 10:59
Cidade/Estado: Paranaíba-MS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes

StartThread()

Mensagempor juniorcamilo » 26 Ago 2020 09:22

para eu entender thread e class !(como citado)
utilizo xHB 1.2.3 (Simples) bcc5.82

fiz um exemplo básico a partir do amigo
JoséQuintas escreveu:Um jeito legal de trabalhar com multithread é usando CLASSE.
Isso permite conversa entre threads.
Não o fonte exato, apenas aproximado, pra dar uma idéia.

ExecutaAguarda( { || Seila() } )

FUNCTION ExecutaAguarda( bCode )

o := ProcessoClass():New()
o:Block := bCode
hb_TheadStart( { || o:Execute() } )
DO WHILE ! o:Acabou
   Inkey(0.3)
ENDDO
RETURN NIL

CREATE CLASS ProcessoClass

   VAR Acabou INIT .F.
   VAR Block INIT {}
   METHOD Execute() INLINE Eval( ::Block ), ::Acabou := .T.
ENDCLASS


resumindo, exemplo que fiz!
FUNCTION Main(Envio)

ExecutaAguarda( { || devpos(10,10),devout("OLA MUNDO") } )

return

FUNCTION ExecutaAguarda( bCode )
o := ProcessoClass():New()
o:Block := bCode
StartThread( { || o:Execute() } )
DO WHILE ! o:Acabou
   Inkey(0.3)
ENDDO
RETURN NIL

CREATE CLASS ProcessoClass
   VAR Acabou INIT .F.
   VAR Block INIT {}
   METHOD Execute() INLINE Eval( ::Block ), ::Acabou := .T.
ENDCLASS


sem sucesso! fica no loop "DO WHILE ! o:Acabou"!
Obs: isso é novo para mim, não tenho conhecimento ainda!
Avatar de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

StartThread()

Mensagempor juniorcamilo » 26 Ago 2020 09:30

acho q descobri o erro!
StartThread( o:Execute() ) e não StartThread( { || o:Execute() } )!

mas mesmo assim enquanto não executar a funcao não libera !
Avatar de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

StartThread()

Mensagempor Itamar M. Lins Jr. » 26 Ago 2020 09:40

Ola!
MT no no XHB ? Como estão os nomes das suas libs ?

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

StartThread()

Mensagempor juniorcamilo » 26 Ago 2020 09:46

como uso xdev studio v0.72 do vailton acredito q com a opção mt selecionada ele poe automático a lib!(acho eu)

Preparando Script "E:\JUNIOR\xdevStudio-0.72 debug\scripts\Harbour.xCompiler"...
Script em Anexo.. "Harbour.xCompiler.prg"...
Preset atual .... xHB build 1.2.3 (SimpLex) & BCC 5.82
PATH ... e:\xBase\xharbour123\bin;e:\xBase\bcc582\Bin
INCLUDE. e:\xBase\xharbour123\include;e:\xBase\bcc582\include
LIB .... e:\xBase\xharbour123\lib;e:\xBase\bcc582\lib;e:\xBase\bcc582\lib\psdk

Variaveis de Ambiente:
PATH ... e:\xBase\xharbour123\bin;e:\xBase\bcc582\Bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Users\Junior\AppData\Local\Microsoft\WindowsApps;
INCLUDE. e:\xBase\xharbour123\include;e:\xBase\bcc582\include;e:\JUNIOR\CLIPPER5\INCLUDE;e:\xBase\xharbour123\include;e:\xBase\bcc582\include;
LIB .... e:\xBase\xharbour123\lib;e:\xBase\bcc582\lib;e:\xBase\bcc582\lib\psdk;e:\xBase\bcc582\Lib;e:\xBase\xharbour123\lib;

Executando: harbour.exe "E:\JUNIOR\COMERCIO\MENU.PRG" /q /o"e:\JUNIOR\comercio\objdebug\MENU.c" /M /N /B -DxHB
xHarbour 1.2.3 Intl. (SimpLex) (Build 20150224)
Copyright 1999-2015, http://www.xharbour.org http://www.harbour-project.org/

Executando: BCC32 -M -c @B32.BC
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
objdebug\MENU.c:

Executando: ILINK32 @B32.BC
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland

Executamos agora o aplicativo gerado com as opções desejadas.


qual a lib a ser usada?
Avatar de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

StartThread()

Mensagempor sygecom » 26 Ago 2020 22:11

@juniorcamilo
Não quero te desanimar, mas no xHarbour MT mais cedo ou mais tarde vai perceber que outras parte do seu sistema vai dar pau sem explicação, ele simplesmente faz uma bagunça. Se existe chance, migre para Harbour para usar MT.
Já tentei diversos testes, mas talvez você consiga, boa sorte.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7005
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

StartThread()

Mensagempor asimoes » 27 Ago 2020 10:09

sygecom escreveu:@juniorcamilo
Não quero te desanimar, mas no xHarbour MT mais cedo ou mais tarde vai perceber que outras parte do seu sistema vai dar pau sem explicação, ele simplesmente faz uma bagunça. Se existe chance, migre para Harbour para usar MT.
Já tentei diversos testes, mas talvez você consiga, boa sorte.

Tem muitos comentários sobre MT no xHarbour, MT não foi bem implementado, melhor dicar é migrar para harbour 3.2 (mais atualizado no momento)
â–º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

StartThread()

Mensagempor juniorcamilo » 27 Ago 2020 10:10

sygecom escreveu:@juniorcamilo
Não quero te desanimar, mas no xHarbour MT mais cedo ou mais tarde vai perceber que outras parte do seu sistema vai dar pau sem explicação, ele simplesmente faz uma bagunça. Se existe chance, migre para Harbour para usar MT.
Já tentei diversos testes, mas talvez você consiga, boa sorte.


obrigado pela informação!

por onde começo para migrar de xharbour para harbour! tem alguém dos amigos que queira essa empreita?
Avatar de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

StartThread()

Mensagempor Itamar M. Lins Jr. » 27 Ago 2020 10:37

Ola!
Só compilar, as funções que por ventura não encontrar podem estar na lib xhb.lib(bcc) ou xhb.a(gcc)
Use gcc.
São poucas funções com o nome trocado.
Veja nos tutorias do José Quintas, como baixar o Harbour.
ou essa: https://groups.google.com/d/msg/harbour-users/cYtBNAT_MzY/9N0cppJKAwAJ

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

StartThread()

Mensagempor JoséQuintas » 27 Ago 2020 11:45

Talvez tenha faltado dizer uma coisa:

Se for executado em segundo plano, sem janela, corre o risco de caso aconteça erro, não ver o erro.
De repente até está executando, mas está ocorrendo erro.

Tente ver se tem registro de erro em log, ou acrescente pra gravar erro em arquivo, ou alguma outra alternativa.
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

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 5 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