C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[70860] [질문] 메인 스레드에서 Sleep()으로 기다리기 .. 옳은 것인 지?
땅주인 [heaven2] 2987 읽음    2014-02-07 17:44
안녕하세요. C++ Builder XE5로 진행중입니다.

프리랜서 분과 같이 작업 중인데.. 구성한 방식에 좀 .. 의문이 생겨서요..

A Thread  -> Queue -> Main Thread
B Thread  -> Queue -> Main Thread
C Thread  -> Queue -> Main Thread

Main Thread는 다른 Thread(A/B/C)가 Queue에 데이터를 채우기를 기다리다가, 
데이터가 들어오면 Queue의 데이터를 꺼내서 main logic를 연결하는 구조입니다.

문제는 Main Thread가 Queue에 뭔가 들어오기를 기다리는 로직이 100ms 씩 Sleep하고 Queue 쳐다보고,
없으면 다시 100ms Sleep 하고.. 이런 구조로 되어 있습니다. 다른 Threa에서 명시적인 Event를 받지 못하니,
100ms Sleep하고, 모든 Queue를 다 뒤져보아야 하는 구조라 좀 .. 이상한 생각이 듭니다.
그리고, Main Thread 가 Sleep으로 기다려야 하는 것도 좀 마음에 걸리구요..
pseudo code로 쓰면 대략 아래와 같습니다.

// MainThread 
while ( !bTerminate) {
   if ( AQueue is not empty ) do something ...
   if ( BQueue is not empty ) do something...
   ...
   Sleep(100); // 100ms 동안 queue가 차기를 기다림.
}


저의 경우 A/B/C Thread가 Queue에 데이터를 채우고, TEvent와 같은 것으로 Main Thread에
명시적으로 Event를 알려주고, Main Thread는 TEvent->WaitFor(1000)와 같은 것으로 Event가 오기를 기다리고,
명시적인 Event가 오면 이 Event에 따라 해당 Queue의 데이터를 꺼내 처리하는 방식으로 처리합니다.
그리고, 기다리는 동안 Time Expire(보통 1000ms) 되면 , 모든 Queue 처다보기, 이런 식으로 처리를 하는데요..
pseudo code로 쓰면 대략 아래와 같습니다.

//MainThrea
while ( !bTerminate) {
   Result = GEvent->Wait(1000);    // Event 오기를 1초간 기다림.
   if ( Result == wrSignaled ) do something.. // 특정 Queue에서 바로 pop하여 처리
   else if ( Result == wrTimeout ) do something.. // 모든 Queue 순회
   else // nothing to do.. 
}

..
어느 쪽을 써도 동작은 되고, 말썽없이 돌아가면 ..뭐.. 그냥 저냥..쓰는데요..
기왕이면 좀더 세련되게 구성하고  싶고, 좀더 이해하기 편한 구조, 읽기 좋은 코드를 구성하고 싶은데요..
어느 방식이 좀더 나을 지 ..
..
저의 생각은 Sleep()을 쓰는 게 좀 걸립니다. Sleep()을 쓰고, Main Thread와 A/B/C Thread간 아무런 동기화 작용도 없고,
좀 뻘쭘한 구성이 되지 않을까 하는 ..
..
다른 분들 의견은 어떠신 지? 궁금하네요..
..
프로그램이라는 게 정답은 없지만, 그래도 좀더 나은 구조, 쉬운 코드 읽기등이 좋지 않을까 하네요.
..
감사.

+ -

관련 글 리스트
70860 [질문] 메인 스레드에서 Sleep()으로 기다리기 .. 옳은 것인 지? 땅주인 2987 2014/02/07
70862     Re:[질문] 메인 스레드에서 Sleep()으로 기다리기 .. 옳은 것인 지? 장성호 3267 2014/02/07
70864         감솨~!Re:Re:[질문] 메인 스레드에서 Sleep()으로 기다리기 .. 옳은 것인 지? 땅주인 3880 2014/02/07
70861     Re:[질문] 메인 스레드에서 Sleep()으로 기다리기 .. 옳은 것인 지? memi 3161 2014/02/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.