Como matar ThRead?

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

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Como matar ThRead?

Mensagem por janio »

Pessoal,

Com hb_ThreadStart eu inicio uma Thread. Mas como mato uma ThRead sem que seja preciso sair do sistema?

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como matar ThRead?

Mensagem por Claudio Soto »

Usar:
hb_threadDetach( pThID )
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Como matar ThRead?

Mensagem por janio »

Não sei a razão, mas para mim apenas funcionou as funções:

hb_threadTerminateAll()

ou

KillThread(ThRead)

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Como matar ThRead?

Mensagem por ANDRIL »

Jânio, saberia se tem como suspender/parar por um determinado tempo uma Thread?
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Como matar ThRead?

Mensagem por janio »

Nao sei. O mundo ThRead ainda eh novo pra mim hehehe

Mas acredito que sim. Não sei se as funções abaixo são para "esperar" alguma outra operação terminar, ou se são para suspender a execução da propria ThRead. Ja eh um bom começo para estudos

hb_threadWaitForAll()
hb_threadWait( <pThID> | <apThID>, [ <nTimeOut> ] [, <lAll> ] ) => <nThInd> | <nThCount> | 0
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Como matar ThRead?

Mensagem por fladimir »

Tenho um problema aki q é o seguinte...

hb_threadTerminateAll() //------------> Funciona porém além de matar a thread q quero mata outras q não quero

ou

KillThread(ThRead) //-----------> Da erro como se a função não existisse.

Alguma ideia?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Como matar ThRead?

Mensagem por fladimir »

Consegui resolver, eu estava pegando o retorno da criação da thread como variavel private ai dava erro, criei uma variavel STATIC ai deu certo.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Como matar ThRead?

Mensagem por HASA »

:-O

Srs. que utilizam o recurso, poderiam me exemplificar um uso legal dessa ThRead, tipo faço determinada coisa enquanto outra coisa acontece, mas... ainda estou :-[ .

:D

HASA
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como matar ThRead?

Mensagem por JoséQuintas »

Criei este pra certas situações

Código: Selecionar todos

CREATE CLASS RunWhileThreadClass

   VAR lExit        INIT .F.
   VAR nThreadId
   VAR nInterval    INIT 600
   VAR cWindowTitle INIT ""
   VAR bCode
   METHOD New()     INLINE ::nThreadId := hb_ThreadSelf(), SELF
   METHOD Execute( bCode )

   ENDCLASS

METHOD Execute( bCode ) CLASS RunWhileThreadClass

   LOCAL nCont

   hb_gtReload( hb_gtInfo( HB_GTI_VERSION ) )
   IF bCode != NIL
      ::bCode := bCode
   ENDIF
   AppInitSets()
   HB_GtInfo( HB_GTI_WINTITLE, ::cWindowTitle )
   wvgSetAppWindow():Hide()
   DO WHILE ! ::lExit
      Eval( ::bCode )
      FOR nCont = 1 TO ::nInterval
         hb_ReleaseCPU()
         IF hb_ThreadWait( ::nThreadId, 0.1, .T. ) == 1
            ::lExit := .T.
         ENDIF
         Inkey(1)
         IF ::lExit
            EXIT
         ENDIF
      NEXT
   ENDDO

   RETURN NIL

Pra encerrar com segurança seria oProcesso:lExit := .T.

Tipo..... quer que o sistema avise de pedidos atrasados enquanto o usuário estiver usando o módulo de pedidos.
Saiu do módulo de pedidos, encerra automaticamente o sistema de avisos de pedido atrasado.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como matar ThRead?

Mensagem por JoséQuintas »

Algo como:

Código: Selecionar todos

oProcesso := RunWhileThreadClass():New()
oProcesso:bCode := { || executar() }
hb_ThreadStart( oProcesso:Executer() )
E só.
No New() a classe pega a ID da thread atual.
No Execute() roda em thread separada, em loop, sempre testando a ID salva.
Se a ID salva encerrou (o programa que ativou a thread), a thread se fecha sozinha.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como matar ThRead?

Mensagem por JoséQuintas »

Talvez criar um método pra retornar o ID, ou pra "se matar", mas se estiver travado, não sei se a classe responderia.

É um jeito interessante das threads conversarem entre si.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como matar ThRead?

Mensagem por JoséQuintas »

fladimir escreveu:hb_threadTerminateAll() //------------> Funciona porém além de matar a thread q quero mata outras q não queroouKillThread(ThRead) //-----------> Da erro como se a função não existisse.
Já foi respondido, mas só pra mostrar opções:

hbmk2 -find thread

hbxpp.hbc (instalado):

Thread()
ThreadID()
ThreadObject()
ThreadWait()
ThreadWaitAll()

hbpgsql.hbc (não instalado):

PQisthreadsafe()

hbsqlit3.hbc (instalado):

sqlite3_threadsafe()

hbwin.hbc (instalado):

wapi_GetCurrentThread()
wapi_GetCurrentThreadId()

rddads.hbc (não instalado):

AdsMgGetWorkerThreadActivity()

xhb.hbc (instalado):

GetCurrentThread()
GetSystemThreadId()
GetThreadId()
hb_MultiThread()
IsSameThread()
IsValidThread()
JoinThread()
KillAllThreads()
KillThread()
StartThread()
StopThread()
ThreadGetCurrent()
ThreadGetCurrentInternal()
ThreadSleep()
WaitForThreads()

Núcleo Harbour (instalado):

hb_threadDetach()
hb_threadID()
hb_threadIsMain()
hb_threadJoin()
hb_threadOnce()
hb_threadOnceInit()
hb_threadQuitRequest()
hb_threadSelf()
hb_threadStart()
hb_threadTerminateAll()
hb_threadWait()
hb_threadWaitForAll()
__vmCountThreads()

josequintas.hbc (não instalado):

appismultithread()
changemultithread()
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