|
예 말씀하신것처럼
Main Thread와 충돌 방지를 위하여 Synchronize를 사용했습니다.
예제로 올린 프로젝트에 적용해보니 한결 안정적으로 돌아가네요..
그런데 UpdateThread에서 ProgressBar->Position++ 대신
원하는 로직(3*320*240 반큼 루프를 돌면서 연산)으로 바꾸어 보면..
역시 원하는 대로 3개의 함수가 동시에 진행되지 않고 Sequencial 하게 동작이 됩니다.
(원하는 것은 3개의 thread가 각기 다른 일을 동시에 처리하는 것)
전반적인 Thread관리가 잘못된것 같은데요..
조언 부탁드립니다.
ㅋ 님이 쓰신 글 :
: 김영욱 님이 쓰신 글 :
: : 영상처리에 쓰레드를 적용하고자 합니다.
: : 우선 첨부 파일처럼
: : CriticalSettion을 세개 생성하고...
: : 각 Thread의 Update 에서 Progressbar 의 값을 1씩 증가 시킵니다.
: : 각 Progressbar가 Max값까지 가면 다른 2개의 쓰레드가 종료 되었지를 살펴보고
: : 다 종료되었으면 다시 쓰레드 3개를 생성하고 종료시키도 생성하는 구조로 되어 있습니다.
: :
: : 잘 동작합니다. (3개의 UpdateThread가 동시에 작동하느 것을 볼 수 있습니다.)
: :
: : 그런데 UpdateThread 부분에 원하는 영상처리로직(조금 깁니다.)을 집어 넣으면..
: : UpdateThread가 동시에 3개가 진행하는 것이 아니고..
: : Thread를 생성한 순서대로 T->UpdateThread, T1->UpdateThread, T2->UpdateThread
: : 순서로 Sequencial하게 돌아갑니다.
: :
: : 이유를 모르겠습니다.
: :
: : 조언해주시면 감사하겠습니다.
:
: 잘 동작?하나요?
:
: Main VCL thread의 무언가를 수정하려면 Synchronize 메서드를 통해서 해야 합니다.
: TScreenThread, TScreenThread1, TScreenThread2 등 세개에 하나의 CRITICAL_SECTION을 사용하여 동시 실행을 억제한 것까지는 그럴듯합니다만 메인 스레드도 스레드인만큼 그것과 충돌이 일어나게 됩니다.
: Synchronize 메서드를 통해서 하세요.
|