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 » 27 Ago 2020 11:50

juniorcamilo escreveu:obrigado pela informação!
por onde começo para migrar de xharbour para harbour! tem alguém dos amigos que queira essa empreita?


Antes de uma mudança radical, veja se realmente precisa de multithread.
Aqui uso apenas pra abrir várias janelas.

Em GUI há um detalhe a mais: você pode ter um módulo SEM JANELA, SEM TELA visível.

Aliás... dois detalhes a mais: caso NÃO defina uma janela pra thread, vai ser usada a atual, pra tela/teclado. Dependendo do que fizer no módulo da thread, precisa uma janela, mesmo que invisível, senão uma atropela a outra. Por exemplo, se os dois módulos tem Inkey(5), o que digitar pode ir pra qualquer das threads.Já com janela invisível, o Inkey(5) apenas vai aguardar 5 segundos, se não existir janela.
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: 18011
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

StartThread()

Mensagempor asimoes » 27 Ago 2020 14:44

JoséQuintas escreveu: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.


Sempre uso BEGIN SEQUENCE... quando uso thread e no recover gero o log do erro
â–º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 » 31 Ago 2020 08:25

JoséQuintas escreveu:
juniorcamilo escreveu:obrigado pela informação!
por onde começo para migrar de xharbour para harbour! tem alguém dos amigos que queira essa empreita?


Antes de uma mudança radical, veja se realmente precisa de multithread.
Aqui uso apenas pra abrir várias janelas.

Em GUI há um detalhe a mais: você pode ter um módulo SEM JANELA, SEM TELA visível.

Aliás... dois detalhes a mais: caso NÃO defina uma janela pra thread, vai ser usada a atual, pra tela/teclado. Dependendo do que fizer no módulo da thread, precisa uma janela, mesmo que invisível, senão uma atropela a outra. Por exemplo, se os dois módulos tem Inkey(5), o que digitar pode ir pra qualquer das threads.Já com janela invisível, o Inkey(5) apenas vai aguardar 5 segundos, se não existir janela.


um uso q gostaria de aplicar uma thread é quando entra no sistema e faz uma conexão com meu FTP para verificar atualizações e liberar o uso do sistema aos clientes, outra para fazer consultas em vários arquivos para gerar uma pesquisa sem deixar o cliente esperando!
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 asimoes » 31 Ago 2020 11:47

juniorcamilo escreveu:um uso q gostaria de aplicar uma thread é quando entra no sistema e faz uma conexão com meu FTP para verificar atualizações e liberar o uso do sistema aos clientes, outra para fazer consultas em vários arquivos para gerar uma pesquisa sem deixar o cliente esperando!


Pra verificar atualizações do aplicativo?, se for isso, o ideal é criar um aplicativo utilitário pra fazer isso, rodando no system tray, que detempos em tempos conecta no seu ftp e verifica se tem versão nova, se for isso que queira fazer.
Eu tenho isso, o meu utilitário atualiza o aplicativo e dispara mensagem para o usuário sobre atualização, pede pra sair.
â–º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 » 31 Ago 2020 14:31

[quote="asimoes"
.... rodando no system tray,.....[/quote]

onde eu acho ajuda para criar(aprender) um exe em xhaubor para deixar em system tray?
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 asimoes » 31 Ago 2020 15:09

juniorcamilo escreveu:onde eu acho ajuda para criar(aprender) um exe em xhaubor para deixar em system tray?


Em xHarbour eu não sei te informar, porque tudo que eu faço é em harbour, se quiser eu te passo o meu utilitário com fonte pra você entender, o utilitário foi feito em harbour + miniguiex
â–º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 Mario Mesquita » 16 Set 2020 10:19

Bom dia a todos.

Aproveito o tópico para pedir um help aos colegas. Nunca fiz thread, mas estava precisando de uma rotina que fizesse uma
contagem e exibisse em tela para mostrar a quantidade em tempo real. Li o tópico e tentei fazer parecido mas não funciona.

1) Inicio do programa:
pThread := StartThread( Conta_Carga() )
Frm_Firmas.activate
StopThread(pThread)

2) A função:

FUNCTION Conta_Carga()
LOCAL Qtd_Sel_El_Disp := 0
      Qtd_Sel_El_Next := 0
      Msg_Cnt_Selos   := ""

//while .t.
IF ! EMPT(SETFIRM->ULT_SEL_EL) .AND. ! EMPT(SETFIRM->FIM_SEL_EL)
   Qtd_Sel_El_Disp := VAL(SUBS(SETFIRM->FIM_SEL_EL,5)) - VAL(SUBS(SETFIRM->ULT_SEL_EL,5)) + 1
ENDIF
IF ! EMPT(SETFIRM->C_SEL_I) .AND. ! EMPT(SETFIRM->C_SEL_F)
   Qtd_Sel_El_Next := VAL(SUBS(SETFIRM->C_SEL_F,5)) - VAL(SUBS(SETFIRM->C_SEL_I,5)) + 1
ENDIF   

Msg_Cnt_Selos := "Selo Inicial: " + SETFIRM->ULT_SEL_EL + " Último Selo: " + SETFIRM->FIM_SEL_EL + " = " + ALLTRIM(STR(Qtd_Sel_El_Disp,12,0)) + ;
                 " Selos  - Próxima Carga: " + ALLTRIM(STR(Qtd_Sel_El_Next,12,0)) + " Selos - TOTAL DE SELOS: " + ALLTRIM(STR(Qtd_Sel_El_Disp+Qtd_Sel_El_Next,12,0))

Frm_Firmas.Lbl_Ult_Sel.Value := Msg_Cnt_Selos
//end

RETURN NIL


Eu já tentei várias formas de chamada, com @, como codeblock, entre aspas e nada... dessa forma aí, quando entra na função
dá um erro de execução: "Error BASE/3012 Erro nos parâmetros: HB_THREADSTART". Outras vezes passa, mas não executa a função
e dá um erro na saída: "Error BASE/3012 Erro nos parâmetros: HB_THREADQUITREQUEST".

Será que falta algo? Algum #include? Estou usando HMG.

Desde já, agradeço.
Saudações,
Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

StartThread()

Mensagempor Claudio Soto » 16 Set 2020 11:01

Hola,
prueba asi:

pThread := StartThread( HB_THREAD_INHERIT_PUBLIC, @Conta_Carga() )
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

StartThread()

Mensagempor Mario Mesquita » 16 Set 2020 12:40

Boa tarde a todos.

Obrigado, dr. Soto, vou tentar.

Sds,
Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

StartThread()

Mensagempor Mario Mesquita » 18 Set 2020 08:35

Bom dia a todos.

Não dei sorte, deu erro (variável não existe) ao usar "HB_THREAD_INHERIT_PUBLIC". E procurando nas pastas não tem nenhum arquivo se referindo a ela.

Vamos continuar tentando...

Sds,
Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

StartThread()

Mensagempor leandrolinauer » 18 Set 2020 10:30

Bom dia
Insira no inicio do fonte o arquivo

#include "hbthread.ch" //para execução em segundo plano

Xharbraços
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 Claudio Soto » 18 Set 2020 10:32

Hola,falta

#include "hbthread.ch"
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

StartThread()

Mensagempor Mario Mesquita » 19 Set 2020 10:22

Bom dia a todos.

Em primeiro lugar, quero agradecer a ajuda dos colegas nesse e em outros tópicos, sou grato a vocês.

Em seguida, dizer que não estou conseguindo resolver, acho que estou fazendo algo errado mas não estou detectando o quê.

Fiz o que me recomendaram: coloquei o #include, a chamada da função de várias formas, mas nada dá certo. Vou tentar explicar:

O programa está desse jeito, nos pontos importantes:

FUNCTION AbreFirmas()
LOCAL pThread
*
*
// a) Dá erro: Executa a função e em seguida o erro "Error BASE/3012 Erro nos parâmetros: HB_THREADSTART"
pThread := StartThread( HB_THREAD_INHERIT_PUBLIC, Conta_Carga() )       

// b) Não funciona.
pThread := StartThread( HB_THREAD_INHERIT_PUBLIC, @Conta_Carga() )       

// c) Não funciona, nada acontece.
pThread := StartThread( HB_THREAD_INHERIT_PUBLIC, {|| Conta_Carga() } ) 

Frm_Firmas.activate

// Isso aqui dá erro: Quando executa do modo "b" ou "c", dá isso: "Error BASE/3012 Erro nos parâmetros: HB_THREADQUITREQUEST".
StopThread(pThread)


Sendo que já declarei a variável "pThread" como MEMVAR e PUBLIC mas sem efeito algum.

Parece que são funções internas que estão dependendo de parâmetros que estão faltando. Será que são do xHarbour e depende
de interpretação para compatibilidade? Já li outros tópicos semelhantes e não consigo resolver até agora...
Estou usando HMG 3.0.46 nesse programa, é coisa que roda em cliente e ainda não passei para 3.4.4.

Sds,
Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

StartThread()

Mensagempor Claudio Soto » 19 Set 2020 10:59

Estas compilando con la opción -mt activada para que soporte multi-thread?
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

StartThread()

Mensagempor Mario Mesquita » 19 Set 2020 11:08

Boa pergunta!

Eu modifiquei na IDE, em Gerenciador de Projeto, no parâmetro "mt": de "no" para "yes". Li isso em um dos post sobre o tema.

Sds.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Anterior Próximo



Retornar para Harbour

Quem está online

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