Executar um método de uma classe com hb_threadStart

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

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem 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 ?
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar um método de uma classe com hb_threadStart

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem por asimoes »

Ok.

E isso pode:

hb_ThreadStart( { || oImprime:Imprime(""imprime.doc") } )
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar um método de uma classe com hb_threadStart

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem por asimoes »

To com esse erro:

oImprime:=ClGui():New()
hb_threadStart({||oImprime:ImprimeRaw(cDocumento)})
Screen Shot 06-19-16 at 05.45 PM.PNG
►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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem 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
►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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem por asimoes »

Se não usar a thread funciona

oImprime:=ClGui():New()
oImprime:ImprimeRaw(cDocumento)
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar um método de uma classe com hb_threadStart

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem 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
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar um método de uma classe com hb_threadStart

Mensagem 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)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem por asimoes »

Quintas,

Você repetiu o que eu postei, rs,
Eu já vi que com thread não funfa, deixa pra lá.
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar um método de uma classe com hb_threadStart

Mensagem por JoséQuintas »

Não olhou direito.
Tem um Inkey(0) no final, por isso comentei de ser só pra teste.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem por asimoes »

Quintas,

Não funcionou, o mesmo erro, diz que variável não existe.
►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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Executar um método de uma classe com hb_threadStart

Mensagem por asimoes »

Quintas,

Tentei isso.

nThread:=hb_ThreadStart( { |oGuiProc|oGuiProc:=ClGui():New(), oGuiProc:ImprimeRaw(cDocumento) } )

Mas diz que variável cDocumento não existe
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Executar um método de uma classe com hb_threadStart

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder