2011-02-22 6 views
0

winmm.dll을 이해하면 틱의 길이를 변경할 수 있습니다.틱없는 운영 체제에서 틱의 길이

Windows 7과 같은 틱없는 OS에서이 기능을 사용하면 어떤 효과가 있습니까?

+0

당신은 timeBeginPeriod 또는 timeSetEvent에 대해 이야기하고 있습니까? '틱이 없다'는 것은 무엇을 의미합니까? –

+0

@Hans : timeBeginPeriod에 대해 예. WinXP는 "진드기"를 유발하는 하드웨어 타이머를 사용했습니다. 진드기는 스레드 선점 사이의 가장 작은 시간 간격이었습니다. 틱 (tick)이 발생하면 인터럽트가 발생하여 현재 스레드를 커널이 스레드 스케줄링을 수행 할 수있는 커널로 강제로 되돌려 보냅니다. 진드기가 더 세밀해질수록 시스템 성능을 저하시키는 더 많은 인터럽트가 발생하지만 스케줄링의 미세 함을 증가시킵니다. 대신 Win7은 "틱리스 (tickless)"인터럽트를 사용합니다. 인터럽트는 수십만 분의 1 초 단위로 스케줄 될 수 있습니다. 모든 X ms를 방해하는 대신, 커널은이 시간에 나를 깨운다. – Bengie

+0

더 큰 질문은 "당신은 무엇을하려고합니까?"라고 생각합니다. –

답변

3

timeBeginPeriod을 호출하면 "눈금"의 길이를 변경할 수 없으며 멀티미디어 타이머 기능에서 예상하는 최소 해상도를 설정합니다. timeBeginPeriod(1)으로 전화하면 timeSetEvent으로 전화하여 설정 한 타이머에서 1 밀리 초 해상도 (기껏해야)를 기대할 수 있습니다.

멀티미디어 타이머를 사용하지 않는 한 (스레드 풀 타이머를 사용하여 더 이상 사용하지 않는 것이 좋을 것 같지 않음), timeBeginPeriod에 전화 할 이유가 없으며 걱정할 필요가 없습니다 . 그러나 이 아닌 timeBeginPeriod 또는 최소 타이머 해상도를 설정하는 다른 함수를 호출하는 데는이 아닌 이유가 있습니다. http://www.microsoft.com/whdc/system/pnppwr/powermgmt/Timer-Resolution.mspxas을 참조하십시오.

Windows는 timeBeginPeriod으로 설정 한 것과 관계없이 100 나노초 "틱"간격으로 시간을 추적합니다. timeBeginPeriod은 정말로 필요한 경우보다 세분화 된 주기적 이벤트를 얻는 한 가지 방법 일뿐입니다. Windows에서 시간을 유지하는 방법에는 아무런 영향을 미치지 않습니다.

+0

Win7 이전의 OS가 설치된 컴퓨터에 액세스 할 수는 없지만 사용법에 대한 모든 예제는 thread.sleep 변경과 관련이 있습니다. 나에게 이것은 커널 틱이 변경되었음을 의미합니다. "수영장 타이머"에 대한 팁을 +1합니다. – Bengie

+0

스레드 풀을 사용하여 TimerQueue의 트랙에 나를 붙잡 았기 때문에이 대답이 충분하다고 생각합니다. – Bengie

관련 문제