반응형
몇년째 델파이를 쓰고는 있지만 아직도 한참을 더 공부를 해야 할 듯한 생각이 든다.
기초가 부족하다는 느낌이 든다고나 할까.
어디서 제대로 된 기초를 교육하는 곳이 있으면 한번 꼭 들어보고 싶다.
최근들어 쓰레드를 만들어쓰는 일이 부쩍늘어 여러가지를 테스트하던 중에
다음과 같은 일을 하게 되었다.
Thread 내부에서 Delay를 줘야 하는 경우이다.
기존에 선임자가 작업했던 부분을 보니 다음과 같이 되어 있었다.
Procedure SleepThread(AWaitcount : Cardinal);
Var
Freq,eTime,nTime: Int64;
Begin
QueryPerformanceCounter(eTime);
QueryPerformanceCounter(nTime);
QueryPerformanceFrequency(Freq);
eTime := eTime + ((Freq * AWaitcount) div 1000);
//
While (eTime - nTime) > 0 do
Begin
QueryPerformanceCounter(nTime);
Application.ProcessMessages;
End;
End;
Graphics32와 Dspack에 대한 작업을 쓰레드 내부에서 하고 있었는데
먼일인지 CPU가 100%까지 사용중이였다. 디버깅을 해보니 SleepThread에서 먼가 잘못된 듯 했다.
Application.processmessages라는 이놈때문이듯 하다.
그래서 결국 내 입맛에 맛게 고쳤다.
Procedure SleepThread(AWaitcount : Cardinal);
Var
vStartTime : TDateTime;
Begin
vStartTime := IncMilliSecond(Now, AWaitCount);
While (vStartTime>Now) And (Not FThreadForceExit) And (FShowMode<>'E') Do
Sleep(1);
물론 CPU 사용률도 5%미만으로 떨어졌으며 잘 동작중에 있다.
자세한 오류 원인은 좀더 찾아봐야 겠다.
현업이 더 급한관계로 이번일은 여기서 마무리 해야겠다.
반응형
'개발관련 > 델파이' 카테고리의 다른 글
델파이 2009 이하버전에서 PNG 파일 사용하기. (0) | 2009.12.03 |
---|---|
AVAST 백신 프로그램 오진현상~~ (1) | 2009.12.03 |
[참고] 화면캡쳐관련 오픈소스 (0) | 2009.11.18 |
윈도우의 종료 또는 재부팅 함수 (0) | 2009.11.18 |
RTF 파일 가지고 놀기 (0) | 2009.11.11 |