Sleep을 좀 주면 괜찮아 질텐데요..
void __fastcall TGuiThread::Execute()
{
while(!Terminated)
{
if(eGUI->WaitFor(500)==wrSignaled){
Synchronize(&UpdateGUI);
}
Sleep(10) ; // 시간은 적절히 주시면 될듯
}
}
JG 님이 쓰신 글 :
: 안녕하세요. 요즘 멀티 쓰레드 프로그램을 작성 중입니다.
: 임베디드 리눅스로 쓰레드를 사용해봐서, 빌더와 크게 다르지 않을 것이라고
: 생가하고 크게 당하고(??)있습니다.
: 다름아니라, 쓰레드 오브젝트를 생성하고 아래와 같은 형식으로 Execute 작성중입니다.
:
: void __fastcall TGuiThread::Execute()
: {
: while(!Terminated){
: if(eGUI->WaitFor(500)==wrSignaled){
: Synchronize(&UpdateGUI);
: }
: }
: }
:
: void __fastcall TUpdateThread::Execute()
: {
: while(!Terminated){
: if(eStat->WaitFor(500)==wrSignaled){
: Update();
: }
: }
: }
:
:
: 일정 이벤트 수십개를 5개 정도 쓰레드에 분배하여 작성하려하는데,
: 위와 같이 while(!Terminated){ } 부분이 존재할 경우 쓰레드를 시작하고 난 후
: 개별 쓰레드의 CPU 점유율이 과도하게 높아져 3개 정도의 쓰레드를 사용하여도
: CPU LOAD가 70% 정도에 육박합니다. 제가 해당 쓰레드에 대한 이해가 부족하여 사용방법에 문제가 있는것으로 보이는데요.
: 위와 같이 일정 이벤트가 들어오기를 지속적으로 감시하여야 하는 상황인데, CPU의 부하를 줄일수 있는 방법이 없을까요?
|