|
TThread클래스에 있는 Synchronize함수는 두개의 쓰레드를 동기화 시키려는게 아니라
여러개의 쓰레드가 동시에 GUI 리소스에 접근하는것은 막기위해 사용하는것으로 압니다.
따라서 Synchronize함수 없이 화면 조작하는 루틴을 마구 사용한다면 어떤 문제가 발생할지
전혀 예측할수 없죠. ( 개인적으로 대부분은 별 문제없었지만 반드시 사용하고 있습니다. )
그러니까 기본이 불안한 상태에서 다음 버그를 잡는다는게 더 힘들다고 생각합니다.
제가 님과 같은 문제에 부딪힌다면...
일단 디버그 모드에서 프로그램을 돌려본후
정상 동작할때의 쓰레드 상태 (일시정지하고 Ctrl+Alt+T 누르면 나오죠. )를 확인해 보고
문제가 발생했을때의 쓰레드 상태들을 확인해서 쓰레드가 어떤 상태로 멈춰 있는것인지..
아니면 완전히 죽은것인지 확인할겁니다.
그 다음 쓰레드가 멈췄거나 죽은 부분을 알아내기위해
의심되는 부분( 짠 사람만 알겠죠?)에 적당히 메시지를 출력하게해서 ( 간단하게 Memo콤포 쓰면되죠)
어디서 멈췄는지를 찾을겁니다.
멈춘 부분만 알면 거기서 문제를 찾아내야 겠죠.
혹시 쓰레드가 죽은 것이라면 대부분은 메모리 문제일겁니다.
그렇다면 Code Guard 옵션 켜 놓고 한번 돌려보시면 메모리 누수되는 부분을 찾을 수 있을겁니다.
: 만약 동기화를 시킨다면 한쪽이 끝난 다음에 다음에 한쪽이 실행되기 때문에
: 이점이 문제가 됩니다.
<- Synch시킨다는게 DisplayUpdate전체를 Synch하는게 아니라 코드 중간중간에 GUI건드리는 부분만
그렇게 처리해줘야 하는겁니다.
그럼 부분적으로는 기다리겠지만 한쪽이 끝난뒤에 다른쪽이 실행되는 일은 없죠.
|