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
[44249] Re:클래스와 큐 그리고 쓰레드 생성에 대한 문제
멀더 [mulder] 2197 읽음    2006-03-24 15:53
안녕하세요. 멀더입니다...

혹시 문제가 VCL과 Thread간 문제라면
BloodWolf  (cyberpd) 님의 답변에 저의 의견을 한가지 더하겠습니다.

하나의 thread라고 해도 thread안에서 직접 VCL Class에 접근하는건 문제를 야기 합니다.
synchronized method를 사용하시거나 (이미 제안된),
windows message handler를 이용하여 처리하면 해결될겁니다.
즉 thread안에서 sendmessage를 호출하시고, form 에서 이메지를 처리하는 handler를 달아서
구동하시면 문제가 해결될듯 합니다.



plusplus 님이 쓰신 글 :
: 안녕하세요 항상 볼랜드 포럼에서 많은 도움을  받고 있는 사람입니다. 잘 안되는 부분이 있어서 질문 올립니다
:
: 인디 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 1296 2006/03/22
44249     Re:클래스와 큐 그리고 쓰레드 생성에 대한 문제 멀더 2197 2006/03/24
44229     Re:클래스와 큐 그리고 쓰레드 생성에 대한 문제 BloodWolf 1027 2006/03/23
44231         Re:Re:클래스와 큐 그리고 쓰레드 생성에 대한 문제 plusplus 1385 2006/03/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.