Pessoal,
Descubri uma coisa interessante na thread na função MarcaTela() o quit para a chamada da função.
A impressão que eu tenho é como se fosse um programa a function MarcaTela, enquanto não tem o quit ela fica sendo chamada.
Alguém me corrija se estiver errado.
Código: Selecionar todos
#include "achoice.ch"
#include "inkey.ch"
#include "hbthread.ch"
static aNomes:={}
PROCEDURE Main()
LOCAL aStruct := { ;
{ "Codigo", "C", 2, 0 }, ;
{ "Nome" , "C", 30, 0 }, ;
{ "Idade" , "C", 2, 0 } ;
}
PUBLIC aNomes:={}, nIdle, thID
SET CURSOR ON
CLS
thID := hb_threadStart( @MarcaTela())
ConfiguraAmbiente()
DbCreate( "Teste", aStruct, "DBFCDX", .T., "Teste" )
USE Teste //EXCLUSIVE
INDEX ON Nome TAG Ind01 TO Ind100
SET INDEX TO Ind100
SET ORDER TO TAG Ind01
DBAPPEND()
REPLACE Nome WITH "BELEM"
//--------------------------------------------------------
DBAPPEND()
REPLACE Nome WITH "JOAO"
//--------------------------------------------------------
DBAPPEND()
REPLACE Nome WITH "MARIANA"
//--------------------------------------------------------
DBAPPEND()
REPLACE Nome WITH "BETE"
//--------------------------------------------------------
DBAPPEND()
REPLACE Nome WITH "ELISABETE"
//--------------------------------------------------------
DBAPPEND()
REPLACE Nome WITH "ALEXANDRE"
//--------------------------------------------------------
DBAPPEND()
REPLACE Nome WITH "PEDRO"
//--------------------------------------------------------
DBAPPEND()
REPLACE Nome WITH "RIO DE JANEIRO"
DBGOTOP()
lPrimeira:=.T.
DO WHILE OrdWildSeek("*R*",IF(lPrimeira,.F.,.T.))
AADD(aNomes,TESTE->Nome)
lPrimeira:=.F.
ENDDO
k:=0
DO WHILE K == 0
ACHOICE(02,01,10,30,aNomes,.T.,"funact")
exit
K:=INKEY()
ENDDO
USE
SET CURSOR ON
RETURN
FUNCTION FUNACT(nMode,nElement,nRow)
LOCAL nKey := LastKey()
LOCAL nRet := AC_CONT
LOCAL cMsg
DO CASE
CASE nMode == AC_IDLE
// do some idle processing
//DispOutAt( MaxRow(), 0, Padr(cMsg, MaxCol()+1), "W+/R" )
CASE nMode == AC_EXCEPT
// key handling for unknown keys
IF nKey == K_ESC
nRet := AC_ABORT
ELSEIF nKey == K_RETURN .OR. nKey == K_LDBLCLK
nRet := AC_SELECT
ELSEIF nKey > 31 .AND. nKey < 255
//nRet := AC_GOTO
ENDIF
ENDCASE
RETURN nRet
FUNCTION ConfiguraAmbiente()
Request HB_LANG_PT
Request HB_CODEPAGE_PT850
HB_SETCODEPAGE( "PT850" )
SET CENTURY ON
SET DATE BRITISH
SET EPOCH TO 2000
SET DELETE ON
SET EXCLUSIVE OFF
SET DBFLOCKSCHEME TO 2 // PARA USO JUNTO COM O CLIPPER
SET OPTIMIZE ON
REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
DbSetDriver("DBFCDX")
RETURN NIL
FUNCTION MarcaTela()
STATIC nTime
IF nTime = Nil
nTime:=Seconds()
ENDIF
WHILE .T.
IF Seconds()-nTime >= 10
hb_idleSleep(0.030)
ScreenMark("E","R+/N",.F.,.T.)
@22,00 say Time()
@23,00 Say Roda()
nTime:=Seconds()
EXIT
ENDIF
ENDDO
QUIT
RETURN Nil
FUNCTION Roda
STATIC nRoda
IF nRoda = Nil
nRoda:=0
ENDIF
cBarra:="|/-\"
nRoda++
cRoda:=SUBST(cBarra,nRoda,1)
IF nRoda = 4
nRoda:=0
ENDIF
RETURN cRoda