|
답변 감사합니다~
구글링 해보니 쓰레드 두개 이상부터는 그런 현상이 벌어 진다네요~
장성호 님이 쓰신 글 :
: 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)
: : {
: : ...
: : }
|