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)})
Screen Shot 06-19-16 at 05.45 PM.PNG

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