|
답변에 감사 감사 감사.. 드립니다.
제가 출장이 있어서 ... 한가지 궁금한 점이 있습니다.
멀티스레드 프로그램은 디비깅모드로 보면서 동작하는게 힘든가요 ?
c++ 빌더만 그런 것인지 다른 모든 컴파일러가 그런 것인가요 ?
그럼 디버딩을 쓰레드 한개 한개 돌리고 그런 식으로 해야 하나요 ?
디버딩 모드에서 돌리지 않고 프로그램을 짜다는 것은 너무 ..
힘들지 않을까요 ?
크레브 님이 쓰신 글 :
: 아래 땅주인님의 얘기가 일반 적으로 맞고요
: 원래 경험이 없으면 너무 단순하게 생각하거나 너무 복잡하게 생각하는 문제가 발생합니다.
: 나중에 경험이 쌓이고 보면 참 괜한 걱정을 했다는 생각이 들게 마련이죠
:
: 일단 멀티 쓰레드 에서 공유하는 자원은 글로벌 객체, 또는 데이터로 만들어 두시고
: 그 자원이 정말로 Critical 하게 싱크를 맞추어야 하는 경우라고 생각되는 부분만
: CriticalSection으로 막으면 됩니다. 그래서 CriticalSection이 있는거니까요
: 물론 다른 프로세스와도 공유하는 자원이라면 ( 그럴일은 거의 없지만)
: 메시지 처리나 Event나 뮤텍스를 사용하는 방법도 생각해 봐야 합니다.
:
: 복잡하게 메시지 처리 까지 생각할 필요 없습니다.
:
: TList 를 사용하는데 여러 쓰레드에서 공유해야 하는 데이터라면
: TThreadList 라도 클래스를 쓰면됩니다. 내부적으로 Lock 기능이 포함되 있죠
:
: 화면에 업데이트(Display) 해야 하는 데이터가 있을때 내가 주로 쓰는 방법은
: 쓰레드에서는 데이터 변수에만 써주고
: 화면에 표시는 타이머에서 해주고 있습니다.
: 대충 100~200 msec 타이머 쓰면 부하도 거의 안걸리고 실시간으로 표시되는것으로 보입니다.
:
: 멀티 쓰레드 프로젝트에서 디버깅을 돌리는것 경험상 거의 자살 행위로 보입니다.
: 최근 C++Builder 2010에서는 좀 나아지긴 했지만..
: 그렇지 않아도 불안정한 디버깅 모드에서 멀티쓰레드 디버깅까지 한다는것은 좀 비추입니다.
:
: 한가지 더 말씀드리면..
: 디버깅을 쓴다는것은 장비 PC에 C++빌더를 설치해서 디버깅하면서 돌리겠다는것인데.
: 별로 좋은 습관이 아닙니다.
: 장비가 라인 들어가면 양산을 타게되고
: 그럴때도 장비 PC에서 빌더로 디버깅하면서 돌린다는것은 좀 없어보입니다.
: 기본적으로 문제 생기는 것은 자기 소스에서 다 분석해서 해결해야 하고
: 굳이 디버깅 정보가 필요하다면
: 로그 데이터를 남길 수 있는 구조를 만드시는게 좋습니다.
:
: 참고할만한 서적은 찾아보셨겠지만.. 전혀 없고요
: 열심히 맨땅에 헤딩하다보면 깨우치는 것도 있겠고
: 이끌어 줄 사람이 있으면 더 빠르거야 당연하고요
: 어떤 일이든지...
: 쉽게 배우면 나중에 꼭 함정에 빠져서 댓가를 치루게 마련입니다.
:
: 대충 생각나는대로 말씀드렸는데.. 좀 도움이 되실런지 모르겠네요
:
:
: 바보 님이 쓰신 글 :
: : 프로그램 작성중 여러가지 문제가 발생.. 몇가지 질문.
: :
: : thread 클래스를 상속받아서 작업용 클래스를 만들고
: :
: : Execute 에서 쓰레드가 실행된다 는 것은 이해 했는데..
: :
: : 이런 쓰레드 4개 정도 만들어서 돌리고 있는데
: :
: : 디버깅 포인터를 걸면 컴파일러가 멈추는 현상이 있습니다.
: :
: : 아마 동기화 때문에 그런거 같은데
: :
: : 지금 동기화 처리 한것.
: :
: : 쓰레드에서 UI을 건들면 안된다 -> 메세지 로 처리해서 메인폼으로 메세지를 보내고 있습니다.
: :
: : 1) 쓰레드에서 다른 쓰레드의 멤버 변수를 알고 싶은 경우도 메세지로 처리해야 되냐요 ?
: :
: : 지금은 그냥 읽어 옴.
: :
: : 그런대 위의 작업용 클래스에 멤버 함수와 멤버 변수를 다른 폼이나 참조 실행하면
: :
: : 문제가 되는 같습니다 .
: :
: : 클래스가 디버깅 포인트로 멈추면 다른 곳에서 그 쓰래드의 변수를 참조 하려할때.
: :
: : 같이 대기 하면서 문제가 되는 같은데 ?
: :
: : 궁금한것은..
: :
: : Execute 함수 실행 하는 곳에서는 다른 쓰레드 함수의 멤버 함수나 멤버 변수를 참조
: :
: : 읽어 오는 것도 안되는 것인가요 ?
: :
: : 또 Execute 에서 실행되지 않는 함수나 변수도 참조 하면 안되는 것인가요 ?
: :
: : 동기화라는 것이 변수를 변경할때 문제가 되는 것안가요 ?
: :
: : 지금 현상을 보면 쓰레드에서 동시 실행되는 로직만 넣어 두고
: :
: : 변수나 참고 해야 하는 값은 다른 곳에서 처리하고 쓰레드에 어떤 값을 전달 하려면 전부 메세지로 처리해야
: :
: : 한다는 결론 ?
: :
: : 쓰레드에 대해서 아는 것이 별로 없으니 ..이런 문제가 ...
: :
: : 혹시 참고 할만한 서적은 ?
: :
: : 혹시 아시분 ?
|