|
요즘 윈도우는 어떤지 모르겠습니다만..
NT 4.0 시절에.. MS 말한 태스크 스위칭 시간은 4~16ms 입니다.
리얼타임 OS 가 아닌 관계로 .. 일정하게 나오지 않습니다.
아주 정확한 타임 스케쥴링이 필요하다면...
리얼타임 OS 나.. 기타 다른 시스템을 고려해 보셔야 합니다.
지금도 나오는지 모르겠습니다만..
윈도우를 러일타임 OS 처럼 1ms 가능하게 해주는 별도의 제품이 있긴 한데..
가격이 제법 비쌉니다.
이름이 아마 RTX 인가 그럴겁니다.
검색해 보시면.. 멀티미디어 타이머와..
기타 방법들로 가능하다고 하시는 분도 있습니다만..
제 경험으로는 .. cpu 점유율 20% 이하대로는 힘들지 않을까 싶네요..
똥꼬베이베 님이 쓰신 글 :
: HANDLE ThreadHandle;
: bool ThreadEnable;
:
: void __fastcall StartThread(void)
: {
: //Thread #1.
: ThreadEnable = true;
: ThreadHandle = CreateThread(NULL , 0 , (LPTHREAD_START_ROUTINE)Loof, NULL , 0 , &dwTimerId);
: SetThreadPriority(ThreadHandle , THREAD_PRIORITY_TIME_CRITICAL);
: }
:
: //----------------------------------------------------------------------------
: void __fastcall EndThread(void)
: {
: //Thread #1.
: ThreadEnable = false;
: ::ResumeThread(ThreadHandle
: while (::GetExitCodeThread(ThreadHandle, &dwTimerId{
: if (dwTimerId == STILL_ACTIVE) continue;
: else break;
: }
: ::CloseHandle(ThreadHandle);
: }
:
: //----------------------------------------------------------------------------
: WORD Loof(void)
: {
:
: //Execute.
: while (ThreadEnable) {
:
: Sleep(1);
:
: }
: return 0L;
: }
:
: 이런식으로 구성을 했는데 지금 다른 컴퓨터들에서도 실험 해봤는데 좀 사양이 괜찮으면 1ms정도로 돌다가 가끔 15정도로 튀고요. 제 컴은 구려서 그런지 아예 15정도로 돕니다.
: 저기서 Sleep(1)을 Sleep(0)으로 하면 1ms 안으로 들어 오는데 cpu가 50프로 넘어 가면서 굉장히 힘들어 합니다.
:
: 요약
: 1. 쓰레드 안에 Sleep(1)을 넣으면 씨피유는 괜찮으나 속도가 15미리 정도 나온다.(컴퓨터 마다 조금 다를수 있음)
: 2. 쓰레드 안에 Sleep(0)을 넣으면 씨피유가 50프로 넘게 되고 속도는 1미리 언더로 떨어 진다.
: 3. 즉 한 5미리 정도로 돌리면서 씨피유 부하율이 20프로 정도 나오게 할수 없습니까?
|