Clipper On Line • Ver Tópico - Como matar ThRead?

Como matar ThRead?

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

Moderador: Moderadores

 

Como matar ThRead?

Mensagempor janio » 01 Out 2017 22:41

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
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Como matar ThRead?

Mensagempor Kapiaba » 03 Out 2017 10:15

Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Como matar ThRead?

Mensagempor Claudio Soto » 06 Out 2017 14:03

Usar:
hb_threadDetach( pThID )
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

Como matar ThRead?

Mensagempor janio » 06 Out 2017 20:32

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Como matar ThRead?

Mensagempor ANDRIL » 07 Out 2017 08:08

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 de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Como matar ThRead?

Mensagempor janio » 07 Out 2017 11:16

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 de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Como matar ThRead?

Mensagempor fladimir » 19 Mai 2019 19:29

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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Como matar ThRead?

Mensagempor fladimir » 19 Mai 2019 23:18

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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Como matar ThRead?

Mensagempor HASA » 20 Mai 2019 11:31

:-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 de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

Como matar ThRead?

Mensagempor JoséQuintas » 20 Mai 2019 18:15

Criei este pra certas situações

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, 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: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como matar ThRead?

Mensagempor JoséQuintas » 20 Mai 2019 18:19

Algo como:

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, 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: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como matar ThRead?

Mensagempor JoséQuintas » 20 Mai 2019 18:29

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, 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: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Como matar ThRead?

Mensagempor JoséQuintas » 20 Mai 2019 18:34

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, 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: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Harbour

Quem está online

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