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: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
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, 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/
