Página 1 de 2
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 16:18
por asimoes
Pessoal,
Tenho uma classe que tem um método de impressão
O método é imprimeraw
oGuiProc:ClGui():New()
oGuiProc:Imprimeraw(cDocumento)
Como eu faço pra ser executado com hb_threadStart ?
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 16:27
por JoséQuintas
Assim:
Código: Selecionar todos
oImprime := ImprimeClass():New()
oImprime:Doc := "imprime.doc"
hb_ThreadStart( { || oImprime:Imprime() } )
Ou algo parecido.
https://pctoledo.org/forum/viewto ... 43&t=16827
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 17:33
por asimoes
Ok.
E isso pode:
hb_ThreadStart( { || oImprime:Imprime(""imprime.doc") } )
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 17:36
por JoséQuintas
Vai porque o nome não é variável. (Só corrigir as aspas a mais... rs)
Mas será que precisa multithread? Acho que isso vai pro spooler do Windows.
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 17:47
por asimoes
To com esse erro:
oImprime:=ClGui():New()
hb_threadStart({||oImprime:ImprimeRaw(cDocumento)})
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 17:50
por asimoes
Quintas,
Tinha uma aspas a mais, mas o erro está no post anterior.
O método Imprimeraw tem parâmetro que é o arquivo a ser impresso
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 17:55
por asimoes
Se não usar a thread funciona
oImprime:=ClGui():New()
oImprime:ImprimeRaw(cDocumento)
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 20:26
por JoséQuintas
Acho que não é isso, é outra coisa.
Ao encerrar o módulo, a variável se destrói, e tchau variável da multithread.... rs
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 20:44
por asimoes
Vamos lá,
A variável oImprime é iniciado antes da chamada da função threadStart, como que ela é destruída, se no método não faz referência a oImprime????
oImprime:=ClGui():New()
oImprime:ImprimeRaw(cDocumento) // assim funciona
hb_threadStart({||oImprime:ImprimeRaw(cDocumento)}) //assim dá erro
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 21:43
por JoséQuintas
Teste assim, só como teste:
Código: Selecionar todos
oImprime:=ClGui():New()
oImprime:ImprimeRaw(cDocumento) // assim funciona
hb_threadStart({||oImprime:ImprimeRaw(cDocumento)}) //assim dá erro
Inkey(0)
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 21:52
por asimoes
Quintas,
Você repetiu o que eu postei, rs,
Eu já vi que com thread não funfa, deixa pra lá.
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 22:26
por JoséQuintas
Não olhou direito.
Tem um Inkey(0) no final, por isso comentei de ser só pra teste.
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 22:37
por asimoes
Quintas,
Não funcionou, o mesmo erro, diz que variável não existe.
Executar um método de uma classe com hb_threadStart
Enviado: 19 Jun 2016 22:47
por asimoes
Quintas,
Tentei isso.
nThread:=hb_ThreadStart( { |oGuiProc|oGuiProc:=ClGui():New(), oGuiProc:ImprimeRaw(cDocumento) } )
Mas diz que variável cDocumento não existe
Executar um método de uma classe com hb_threadStart
Enviado: 20 Jun 2016 02:06
por JoséQuintas
Fiz este teste aqui, ok.
Código: Selecionar todos
#include "hbclass.ch"
PROCEDURE Main
LOCAL oImprime, cDocumento := "teste.txt"
CLS
oImprime := ClGui():New()
oImprime:cDocumento := cDocumento
hb_ThreadStart( { || oImprime:ImprimeRaw() } )
Inkey(0)
RETURN
CREATE CLASS ClGui
VAR cDocumento
METHOD ImprimeRaw()
END CLASS
METHOD ImprimeRaw()
? ::cDocumento
RETURN NIL