|
Synchronize에 대한 이해가 필요할듯 하네요
Synchronize란 ?
1. Synchronize는 파라메터로 넘긴 함수를 Main쓰레드(GUI쓰레드)에서 호출하고
2. 호출한 쓰레드는 Main쓰레드에서 함수동작을 끝낼때 까지 기다립니다.
코드 설명
그런데 ..
Thread에서 계속 Synchronize를 호출하면
MainThread(GUI쓰레드)에서는 그것 처리한다고 바빠서..
기타 다른 GUI쓰레드가 해야할 작업(mouse,keyboard,timer,화면업데이트)등을 제대로 못하게 된느 것입니다.
Synchronize 바른 사용
Synchronize는
Thread에서 어떤 작업을 하다가..
GUI를 access해야할 경우에 한해서
어쩌다가 한번씩 호출해줘야지 합니다.
님코드와 같이 계속 호출해주면 GUI-Thread가 버벅 거릴수 밖에 없습니다.
그럼...
레쓰비 님이 쓰신 글 :
: 쓰레드를 3개 돌리는데요 Synchronize() 사용시 메인폼 UI들을 작동할 수가 없네요~
: Sleep (30); 이상 줘야 메인 UI 를 마우스로 선택할 수 있습니다.
: 원래 이런 현상이 정상일까요?
:
: void __fastcall tProcess::Execute()
: {
: while(!Terminated)
: {
: Sleep (10); // <- Sleep (30) 이하는 너무 빨라서 메인폼 UI 선택인 안되요~
: ...
: ...
: for(int x=0; x<100; x++)
: {
: Synchronize(UpdateThread);
: }
: }
: }
:
: void __fastcall tProcess::UpdateThread(void)
: {
: ...
: }
|