Página 1 de 1

Como matar ThRead?

Enviado: 01 Out 2017 22:41
por janio
Pessoal,

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

Janio

Como matar ThRead?

Enviado: 03 Out 2017 10:15
por Kapiaba

Como matar ThRead?

Enviado: 06 Out 2017 14:03
por Claudio Soto
Usar:
hb_threadDetach( pThID )

Como matar ThRead?

Enviado: 06 Out 2017 20:32
por janio
Não sei a razão, mas para mim apenas funcionou as funções:

hb_threadTerminateAll()

ou

KillThread(ThRead)

Janio

Como matar ThRead?

Enviado: 07 Out 2017 08:08
por ANDRIL
Jânio, saberia se tem como suspender/parar por um determinado tempo uma Thread?

Como matar ThRead?

Enviado: 07 Out 2017 11:16
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

Como matar ThRead?

Enviado: 19 Mai 2019 19:29
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?

Como matar ThRead?

Enviado: 19 Mai 2019 23:18
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.

Como matar ThRead?

Enviado: 20 Mai 2019 11:31
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

Como matar ThRead?

Enviado: 20 Mai 2019 18:15
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.

Como matar ThRead?

Enviado: 20 Mai 2019 18:19
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.

Como matar ThRead?

Enviado: 20 Mai 2019 18:29
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.

Como matar ThRead?

Enviado: 20 Mai 2019 18:34
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()