STATIC e THREAD STATIC
Moderador: Moderadores
STATIC e THREAD STATIC
Pessoal,
Qual é a diferença entre STATIC e THREAD STATIC
Qual é a diferença entre STATIC e THREAD STATIC
►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)
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)
STATIC e THREAD STATIC
E eu nem sabia que existia "THREAD STATIC", agora fiquei curioso... 
Nilton Medeiros
nilton@sistrom.com.br
nilton@sistrom.com.br
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
STATIC e THREAD STATIC
Deixou passar... rs
https://pctoledo.org/forum/viewto ... ic#p102606
THREAD STATIC é o mesmo que STATIC, mas restrito à thread.
STATIC Conexao -> Ao usar várias threads, Conexao vai ser a mesma pra todas as threads
THREAD STATIC Conexao -> Cada thread vai ter sua própria conexao
Supondo que vai rodar varias rotinas de enviar email em background e em multithread, que usam uma determinada variável STATIC.
Deixando como THREAD STATIC uma não interfere na outra.
https://pctoledo.org/forum/viewto ... ic#p102606
THREAD STATIC é o mesmo que STATIC, mas restrito à thread.
STATIC Conexao -> Ao usar várias threads, Conexao vai ser a mesma pra todas as threads
THREAD STATIC Conexao -> Cada thread vai ter sua própria conexao
Supondo que vai rodar varias rotinas de enviar email em background e em multithread, que usam uma determinada variável STATIC.
Deixando como THREAD STATIC uma não interfere na outra.
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/
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/
STATIC e THREAD STATIC
Quintas,
Deixa eu ver se eu entendi.
Tenho uma rotina de Email
Nela eu tenho :
THREAD STATIC cConexao
Se eu chamar
hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, HB_THREAD_INHERIT_PRIVATE, HB_THREAD_INHERIT_MEMVARS ), @Email() )
hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, HB_THREAD_INHERIT_PRIVATE, HB_THREAD_INHERIT_MEMVARS ), @Email() )
cConexao em cada chamada vai ter valor diferente?
Deixa eu ver se eu entendi.
Tenho uma rotina de Email
Nela eu tenho :
THREAD STATIC cConexao
Se eu chamar
hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, HB_THREAD_INHERIT_PRIVATE, HB_THREAD_INHERIT_MEMVARS ), @Email() )
hb_ThreadStart( HB_BITOR( HB_THREAD_INHERIT_PUBLIC, HB_THREAD_INHERIT_PRIVATE, HB_THREAD_INHERIT_MEMVARS ), @Email() )
cConexao em cada chamada vai ter valor diferente?
►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)
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)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
STATIC e THREAD STATIC
Isso.
Outro exemplo, eu tenho uma "pilha" de save screen/restore screen, um array
Posso ir salvando/restaurando com wSave() e wRestore(), que apenas vão adicionando/retirando elementos do array.
Em multithread, impossível, porque não segue a ordem, qualquer janela pode salvar/restaurar, e a ordem não será mais a mesma.
Ao invés de complicar, o que eu fiz:
Pronto, cada módulo tem sua pilha particular de telas pra salvar/restaurar.
Melhor do que qualquer rotina complexa.
Outro exemplo, eu tenho uma "pilha" de save screen/restore screen, um array
Código: Selecionar todos
STATIC wTelas := {}
Em multithread, impossível, porque não segue a ordem, qualquer janela pode salvar/restaurar, e a ordem não será mais a mesma.
Ao invés de complicar, o que eu fiz:
Código: Selecionar todos
THREAD STATIC wTelas := {}
Melhor do que qualquer rotina complexa.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
STATIC e THREAD STATIC
Por falar nisso, se for fazer gets em multithread, e tiver getsys pessoal, é obrigatório usar isso na Getsys.
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/
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/
STATIC e THREAD STATIC
Brincando com THREAD STATIC e além
Exemplo usando hb_Idle, getList e THREAD STATIC
Pode ser útil para alguém.
Exemplo usando hb_Idle, getList e THREAD STATIC
Pode ser útil para alguém.
Código: Selecionar todos
FUNCTION MAIN
LOCAL cTeste1:=Space(8), cTeste2:=Space(8), cTeste3:=Space(8)
oInatividade := ClInatividade():New()
oInatividade:Start( .T., 5, {|| Put( Time() )}, "A")
@ 05,00 GET cTeste1
@ 06,00 GET cTeste2 WHEN {|| oInatividade:End("A") }
@ 07,00 GET cTeste3 WHEN {|| oInatividade:Start( .T., 30, {|| Put( Time() )}, "A") }
READ
RETURN Nil
FUNCTION Put( cVar )
LOCAL nRow, nCol, oElemento
nRow:=Row()
nCol:=Col()
FOR EACH oElemento IN GetList
WITH Object oElemento
IF :name = "cTeste3"
:Varput( cVar )
:UpdateBuffer()
:Display()
ENDIF
END
NEXT
SETCURSOR(1)
SetPos(nRow, nCol)
RETURN Nil
#pragma BEGINDUMP
#include "windows.h"
#include "time.h"
#include "hbapi.h"
HB_FUNC( PEGAINATIVIDADE )
{
LASTINPUTINFO lpi;
lpi.cbSize = sizeof (LASTINPUTINFO);
GetLastInputInfo (&lpi);
hb_retnd( ( DOUBLE ) ( GetTickCount() - lpi.dwTime ) / CLOCKS_PER_SEC );
}
#pragma ENDDUMP
Código: Selecionar todos
*****************************************************
* Função para verificar ociosidade de teclado e mouse
* executa um bloco de função/procedure
* ---------------------------------------------------
* Autor : Alexandre Simões
* Data : 13/10/2016
* Versão: 1.1
*****************************************************
#include "hbclass.ch"
THREAD STATIC nIdleTimeInatividade
THREAD STATIC aIdle:={}
CREATE CLASS ClInatividade
METHOD Start( lInicio, nTempo, bBloco, cIdentificador )
METHOD End( cIdentificador )
METHOD Inatividade( nTempo, nIdleTimeInatividade, bBloco )
ENDCLASS
METHOD Start( lInicio, nTempo, bBloco, cIdentificador ) CLASS ClInatividade
LOCAL oElemento
hb_Default(@lInicio, .T.)
hb_Default(@nTempo, 10)
hb_Default(@bBloco, {|| lInicio:=lInicio })
hb_Default(@cIdentificador, "A")
IF lInicio
nIdleTimeInatividade := hb_IdleAdd( {|| ::Inatividade( nTempo, nIdleTimeInatividade, bBloco ) } )
aAdd( aIdle, {nIdleTimeInatividade, cIdentificador} )
ELSE
::End( cIdentificador )
ENDIF
RETURN .T.
METHOD End( cIdentificador ) CLASS ClInatividade
LOCAL oElemento
hb_Default(@cIdentificador, "T")
FOR EACH oElemento IN aIdle
IF cIdentificador = "T"
IF oElemento[1] != Nil
hb_IdleDel( oElemento[1] )
ENDIF
ELSE
IF oElemento[1] != Nil .AND. oElemento[2] = cIdentificador
hb_IdleDel( oElemento[1] )
ENDIF
ENDIF
NEXT
IF cIdentificador = "T"
aIdle := {}
ELSE
FOR EACH oElemento IN aIdle
IF oElemento[1] != Nil .AND. oElemento[2] = cIdentificador
hb_IdleDel( oElemento[1] )
hb_ADel( aIdle, oElemento:__enumIndex() , .T. )
ENDIF
NEXT
ENDIF
RETURN .T.
METHOD Inatividade( nTempo, nIdleTimeInatividade, bBloco ) CLASS ClInatividade
IF Round(PegaInatividade(),0) >= nTempo .AND. ValType( bBloco ) = "B"
hb_IdleReset( nIdleTimeInatividade )
Eval ( bBloco )
ENDIF
hwg_DoEvents()
hb_IdleSleep( 0 )
RETURN Nil
►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)
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)

