Q&A

  • 쓰레드 실행시간에 대하여
안녕하세요~

현재 프로젝트 진행중에... 쓰레드 관련하여 포퍼먼스가 생각보다 좋게 나오지

않아서 고민에 쌓여 있습니다.

일단 제일 큰 문제가 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초 가량 멈췄다가...한꺼번에 밀려서 작업이 될때가 있습니다

완전 똑 같이는 못 하더라도 거의 일정한 작업 시간을 서로 유지 하게 하는 방법은 없을까요?

요즘 이것 때문에 고민에 쌓여 있습니다 ㅠ.ㅠ

1  COMMENTS
  • Profile
    권경혁 2004.11.11 05:23
    procedure WaitEvent(sec: integer);
    var FirstTickCount: longint;
    begin
      FirstTickCount := GetTickCount;
      repeat
        Application.ProcessMessages;
        sleep(1);
      until ((GetTickCount - FirstTickCount) >= sec);
    end;