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
[44227] 클래스와 큐 그리고 쓰레드 생성에 대한 문제
plusplus [] 1295 읽음    2006-03-22 22:44
안녕하세요 항상 볼랜드 포럼에서 많은 도움을  받고 있는 사람입니다. 잘 안되는 부분이 있어서 질문 올립니다

인디 UDP와 큐 그리고 쓰레드를 동적으로 생성하는 클래스를 만들고 있습니다.
UDP에 데이터가 들어오면 데이터를 큐에 저장하고 쓰레드는 큐를 검사해서 해당 작업을 하게 만들어야 합니다.
다른 부분은 정상적으로 작동합니다. 그런데 쓰레드에서 큐가 비어있는지 검사하는 부분에 들어가면 에러가
떨어집니다.

클래스 생성 부분(TUDPChannel.cpp )과 쓰레드부분(UDPThread.cpp)을 아래와 같이 작성했습니다.
큐는 일반적으로 쓰는 방식대로 했는데 에러가 나서 미치겠습니다.
에러가 뜰때 _deque.h 의

#ifdef _STLP_USE_SEPARATE_RELOPS_NAMESPACE

template <class _Tp>
inline bool _STLP_CALL
operator==(const _Deque_iterator_base<_Tp >& __x,
       const _Deque_iterator_base<_Tp >& __y) {
    return __x._M_cur == __y._M_cur;
}
에서 에러가 떨어집니다.

** 질문사항 1.클래스에서 선언한 큐를 쓰레드에서 사용하려면 어떻게 해야 될까요?
                  2. 1번 과정이 이상없다면 동적으로 여러개 생성할때 문제가 없어야 합니다.

//---TUDPChannel.cpp 클래스 생성 부분--------------------------------------------------------------

class TUDPChannel
{
public:

   TIdUDPServer *IndyUDP;

   TUDPChannel();
   ~TUDPChannel();

   struct Receiver    // UDP 데이터가 들어오면 데이터를 저장하는 구조체
   {
      int iMode;              // 폴링 신호 1,  데이터 2,
      int iLength;            // 패킷 길이
      AnsiString strMCName;   // 모델명
      AnsiString strClientIP; // 클라이언트 아이피
      AnsiString strDate;
      AnsiString strTime;
      byte *RecvBuff;          // 수신한 패킷
   };

   Receiver InputItem;
   Receiver RecvItem;
   queue <Receiver, deque<Receiver> > RecvQue;   //사용할  큐

   TThread *RecvThread;   // 사용할 쓰레드
   void __fastcall UDPSet(int defaultPort);  //해당 변수로 포트 오픈(같은 아이피에 포트만 다르게 생성)
   void __fastcall TIdUDPServerRead(TObject *Sender, TStream *AData,
          TIdSocketHandle *ABinding);
private:
};
extern TUDPChannel *UDPSock;

//---TUDPThread.cpp 쓰레드 Excute 부분-------------------------------------------------------------

      while (!Terminated)
      {
         if (!UDPSock->RecvQue.empty())
         {
            Form1->Memo1->Lines->Add("Not Empty!!");
            ::Sleep(300);
         }
         else
         {
            Form1->Memo1->Lines->Add("Empty!!");
            ::Sleep(300);
         }

+ -

관련 글 리스트
44227 클래스와 큐 그리고 쓰레드 생성에 대한 문제 plusplus 1295 2006/03/22
44249     Re:클래스와 큐 그리고 쓰레드 생성에 대한 문제 멀더 2197 2006/03/24
44229     Re:클래스와 큐 그리고 쓰레드 생성에 대한 문제 BloodWolf 1026 2006/03/23
44231         Re:Re:클래스와 큐 그리고 쓰레드 생성에 대한 문제 plusplus 1385 2006/03/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.