|
답변주신분들 전부 감사드립니다.
감사 감사 ......
이제 조금 복잡한 머리가 .. 정리되는 느낌입니다.
지금 까지는 머리 속이 아주 복잡해서 내가 왜 !! // 프로그래머라는 직업을 선택했냐 ,할 정도로 ㅋㅋ
혼자 만들려구 하니 물어 볼 곳도 없구, 너무 감사.
많은 것이 정리가 되서 이제
처음 부터 다시 해보겠습니다 ..
감사 감사 그럼 수고하세요.
크레브 님이 쓰신 글 :
: Lyn님이 쓴 것과 같은 이유로 디버깅을 잘 안쓴다는것이고요.
: 제가 말씀드린대로 로그 기록 남기는 방식을 적용해야 합니다.
: 디버깅 없이도 얼마든지 프로그램 작성 가능합니다.
:
: 오히려 초보개발자들에겐 디버거가 실력 향상의 악의축이라고 개인적으로 생각합니다.
: 대충 코딩해 놓고 디버거로 돌리면서 개발하려는 안일한 생각이 깔려 있기 때문이죠
: 이런 태도는 실력 향상에 별로 안좋습니다.
:
: 처음엔 조금 힘들어도 디버거 없이 해보시길.. ( 물론 꼭 필요할때는 한번씩 써야죠. ^^ )
:
:
: 바보 님이 쓰신 글 :
: : 답변에 감사 감사 감사.. 드립니다.
: :
: : 제가 출장이 있어서 ... 한가지 궁금한 점이 있습니다.
: :
: : 멀티스레드 프로그램은 디비깅모드로 보면서 동작하는게 힘든가요 ?
: :
: : 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 에서 실행되지 않는 함수나 변수도 참조 하면 안되는 것인가요 ?
: : : :
: : : : 동기화라는 것이 변수를 변경할때 문제가 되는 것안가요 ?
: : : :
: : : : 지금 현상을 보면 쓰레드에서 동시 실행되는 로직만 넣어 두고
: : : :
: : : : 변수나 참고 해야 하는 값은 다른 곳에서 처리하고 쓰레드에 어떤 값을 전달 하려면 전부 메세지로 처리해야
: : : :
: : : : 한다는 결론 ?
: : : :
: : : : 쓰레드에 대해서 아는 것이 별로 없으니 ..이런 문제가 ...
: : : :
: : : : 혹시 참고 할만한 서적은 ?
: : : :
: : : : 혹시 아시분 ?
|