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