IA doida ensinando errado

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

Moderador: Moderadores

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

IA doida ensinando errado

Mensagem por JoséQuintas »

A função hb_gcall() pertence ao Harbour, a linguagem baseada em xBase/Clipper.
Ela é usada para chamar uma função ou procedimento dinamicamente, ou seja, quando você tem o nome da função em uma variável ou precisa decidir em tempo de execução qual rotina executar.
📌 Quando usar hb_gcall()
- Execução dinâmica: quando você não sabe qual função será chamada até o momento da execução.
- Chamadas indiretas: quando o nome da função está armazenado em uma string ou símbolo.
- Flexibilidade: útil em frameworks, bibliotecas ou sistemas que precisam carregar módulos e executar funções sem codificação fixa.
⚙️ Sintaxe básica
hb_gcall( <cFuncName>, [<aArgs>] )


- <cFuncName> → nome da função/procedimento a ser chamado (string).
- <aArgs> → array com os argumentos que serão passados para a função (opcional).
🧩 Exemplo prático
FUNCTION OlaMundo( cNome )
? "Olá, " + cNome
RETURN NIL

PROCEDURE Main()
LOCAL cFunc := "OlaMundo"
hb_gcall( cFunc, { "José" } )
RETURN


➡️ Nesse exemplo, a função OlaMundo() é chamada dinamicamente através de hb_gcall().
resultado será:
Olá, José

👉 Resumindo: você deve executar hb_gcall() quando precisar chamar funções/procedimentos cujo nome só é conhecido em tempo de execução.
Boa pergunta 👍.
No Harbour, a função hb_gcall() não tem nada a ver com limpeza de memória — ela serve apenas para chamadas dinâmicas de funções/procedimentos.
🧹 Limpeza de memória no Harbour
Quem cuida da memória é o Garbage Collector (GC) interno da linguagem. Ele é acionado automaticamente quando variáveis deixam de ser referenciadas. Mas existem funções utilitárias para forçar ou ajudar nesse processo:
- hb_gcAllFree() → força o coletor de lixo a liberar toda memória não referenciada naquele momento.
- hb_gcCollect() → executa uma coleta de lixo imediata, mas não tão agressiva quanto hb_gcAllFree().
- hb_gcGripGet() / hb_gcGripDrop() → usadas para controlar referências manuais em objetos, evitando que sejam coletados antes da hora.

Aí endoidoi de vez.... duplicou a função...
parece que está errado sobre hb_gcall

Você tem razão: eu me confundi antes.
A função correta relacionada à limpeza de memória no Harbour/xHarbour é HB_GCAll(), não hb_gcall().
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
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7990
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: IA doida ensinando errado

Mensagem por Itamar M. Lins Jr. »

Olá!
De quem é essa IA ?
Saudações,
Itamar M. Lins Jr.
Responder