Investigating Sleep() Dormindo mais do que o esperado
A função Sleep() da API do Windows é uma ferramenta versátil para suspender a execução de threads. No entanto, alguns usuários encontram um comportamento inesperado em que a função fica suspensa por mais tempo do que o pretendido. Este artigo se aprofundará no problema, examinando sua ocorrência comum e possíveis causas.
Comportamento e disparidade de duração
Ao chamar Sleep(1) em um loop 100 vezes, observa-se que o tempo total de sono é de 1.500 ms em vez de 100 ms. Esta disparidade sugere que a duração real do sono é de aproximadamente 15 ms por iteração. Observe que esse comportamento varia entre os sistemas, com alguns usuários relatando durações de sono consistentes de 1 ms.
Possíveis motivos
A duração excessiva do sono pode não indicar necessariamente um mau funcionamento de hardware ou software . O agendamento de threads do Windows emprega um "quantum de tempo", um intervalo de tempo ao qual a execução do thread está vinculada. Para durações de sono diferentes de zero, o atraso real é arredondado para o quantum completo mais próximo.
Default Time Quantum
Por padrão, o Windows 7 tem um quantum de tempo de 15,6ms. Isso significa que Sleep(1) irá realmente suspender o thread por um mínimo de 15,6 ms, resultando no comportamento observado de 15 ms de suspensão por iteração.
Explicação Alternativa
Em alguns casos, as durações de suspensão observadas de 1 ms podem ser atribuídas à presença de outro programa ou processo que modificou a resolução do temporizador de todo o sistema para 1 ms. Essa substituição pode levar a durações de sono mais precisas.
Conclusão
O comportamento da função Sleep() neste cenário normalmente é esperado. O mecanismo quântico de tempo do agendador de threads do Windows arredonda as durações do sono para intervalos completos, resultando em tempos de sono mais longos para durações curtas. No entanto, fatores externos, como configurações modificadas de resolução do temporizador, também podem influenciar o comportamento do sono.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3