Amigos, retornando ao Clipper, agora como hobby, verifiquei que o programa que estou fazendo para jogar Sudoku, quando em espera por inkey() ou achoice() toma todo o processador apenas para si. Ou seja, nessas esperas, examinando o Gerenciador de Tarefa, o processador fica ocupado 100%, pelo menos no Windows XP. Pesquisei e encontrei a seguinte solução: no inicio do programa principal, logo após as declarações de LOCAL e STATIC se existirem, acrescente a seguinte instrução:
ft_onidle({||ft_iamidle()})
Necessita das libs NANFOR e CPMI. Mas atenção, não a NANFOR.LIB original. Na NANFOR.LIB original há essa função mas que não funciona bem com os "filhos" do Windows NT 4 (2000, XP, talvez o 7). Para esses SOs, é preciso substituir uma de suas funções, a FT_IAmIdle().
O .OBJ dessa função está no pacote e substituí-la na NANFOR.LIB é bem fácil, com o utilitário LIB.EXE que vem com o VB5, da MS.
Histórico e instruções sobre esse recurso estão em http://www.engwall.com/clipper/nfpat1a.htm
O resultado é que os estados de espera agora usam 0% do processamento.
Em tempo: Antes de postar, dei uma verificada e não encontrei tópico sobre esse assunto. Mas como ando meio "enferrujado", pode ser que já exista, sim, e que eu esteja chovendo no molhado. Se for o caso, peço desculpas e que desconsiderem esses tópico.
Liberar processador em esperas
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20416
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
Liberar processador em esperas
Existem posts sobre isso.
Coincidiu que conheci direto a OSLIB, resolveu, então nunca testei nenhuma outra opção.
Não sei dizer se é melhor ou pior, apenas sei que funciona.
No início do aplicativo, pra ativar o controle automático:
E depois, se quiser ajuste mais detalhado, só acrescentar chamadas aonde sabe que pode liberar toda CPU:
Coincidiu que conheci direto a OSLIB, resolveu, então nunca testei nenhuma outra opção.
Não sei dizer se é melhor ou pior, apenas sei que funciona.
No início do aplicativo, pra ativar o controle automático:
Código: Selecionar todos
OL_Yield(.T.)
Código: Selecionar todos
nKey := 0
DO WHILE nKey != K_ESC
nKey := Inkey()
OL_Yield()
ENDDO
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
