안녕하세요~
현재 프로젝트 진행중에... 쓰레드 관련하여 포퍼먼스가 생각보다 좋게 나오지
않아서 고민에 쌓여 있습니다.
일단 제일 큰 문제가 CPU 점유율입니다
VCL(TWinControl상속)에서 TCP로 데이터를 처리하는데
수신처리가 쓰레드로 작성하였습니다.
패킷을 수신하여 1패킷이 완성되면(동영상프레임) Canvas에 출력합니다
1개만 사용할때에는 아무 무제가 없는 Form에 이 VCL를 4개 올려서 실행하면
CPU 부하율이 많이 증가합니다. Sleep(1)이 쓰레드 루프안에 들어가 있는 상태이구요
펜4 1.4G에서는 CPU점유율이 그나마 10%이내로 적당한 수준의 성능을 발휘합니다만
펜3 500대에선..100%를 찾지 하네요...
일단 이 부분을 해결 하기 위해선 Sleep 말고 태스크스위칭을 할 수 있는
API함수는 없는지 알고 싶습니다.
CPU가 느려서 그렇다면 어쩔수 없겠지만요...
그리고 마지막으로
이 4개의 쓰레드가 항상 똑 같은 시간을 가지고 실행되게 하는 방법을 없을까요?
몇십초당 한번씩... 한쪽 쓰레드가 1~10초 가량 멈췄다가...한꺼번에 밀려서 작업이 될때가 있습니다
완전 똑 같이는 못 하더라도 거의 일정한 작업 시간을 서로 유지 하게 하는 방법은 없을까요?
요즘 이것 때문에 고민에 쌓여 있습니다 ㅠ.ㅠ
var FirstTickCount: longint;
begin
FirstTickCount := GetTickCount;
repeat
Application.ProcessMessages;
sleep(1);
until ((GetTickCount - FirstTickCount) >= sec);
end;