|
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프로 정도 나오게 할수 없습니까?
|