Desde que começou a história de 100% de CPU, eu só usei OSLIB e nenhuma outra.
E para o caso do Inkey(), substituí por MyInkey() e coloquei uso/abuso da OSLIB.
A OSLIB tem basicamente duas funções:
Uma pra liberar CPU automático:
OL_AutoYield(.T.)
Outra pra liberar na hora:
OL_Yield()
Então, dentro do MyInkey() era algo do tipo:
Código: Selecionar todos
FUNCTION MyInkey( nTempo )
nKey := 0
DO WHILE nKey == 0
nKey := Inkey()
OL_Yeld()
ENDDO
RETURN nKey
Só olhando backups antigos pra pegar a função completa, incluindo a contagem de tempo.
Depois alterar onde der, incluindo GETSYS.
E caso o usuário demorasse muito pra responder, o ESC assumia o retorno.
Mas tem que lembrar também das perguntas Sim ou Não, e outras, porque vão precisar de um default pra resposta.
No caso delas, coloquei pra assumir um default para o caso do usuário demorar, que podia ser Sim ou Não, dependendo do caso.
Por falar nisso.... usando a API do Windows pras mensagens, acabou ficando sem isso.
O usuário sempre encontra uma brecha pra manobrar essas coisas.
Hoje ouvi dos usuários: vamos almoçar e quando voltamos o sistema fechou.....
Mas também: nem email funcionava....
É que o servidor desconecta o terminal que fica mais de 15 minutos inativo... então tem essa também: se o programa não desconectar, o servidor faz isso, e nem se importa se haviam arquivos abertos.