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
[72781] Re:Re:Re:Re:IdTCPServer에서 Execute에서만 송신을해야하나요? (수정)(도와주세요..)
앱돌이 [] 4267 읽음    2015-06-16 09:38
조언 감사합니다. 좀더 분발해서 공부해야겠어요!

Intotheblue 님이 쓰신 글 :
: 이 부분이 문제가 아니라.
: 님은 포인터와 객체에 대해서 이해가 부족해요.
:
: 이부분이 부족하다는건.. 적어도 c/c++로 뭔가 만들어 보겠다고 시도 하긴 어려워요.
:
: 포인터와 객체에 대한 부분은 책에서도 몇 챕터에 걸쳐서 설명하는 부분이라..
: 댓글로 공부할 내용은 아니구요..
:
: 최대한 간단히 설명하면..
:
:
: 1. TIdPeerThread *AThread; 이건 포인터 선언만 한겁니다.
: 이거 그대로 쓰면 당연히 access violation error 뜹니다.
:
: 2. 선언하면 할당을 해줘야 됩니다.
: TIdPeerThread *AThread = new TIdPeerThread ;
:
: 아님 아래 처럼 이미 만들어진 객체를 땡겨오던가요 .
:
:  AThread = (TIdPeerThread *) List->Items[Loop];
:
: 이런식이죠 근데 님 코드엔 이게 없어요.
:
: 3. List 는 자료형입니다.
: TList 는 객체나 데이터를 보관하는 자료형입니다.
: 여기에 객체나 데이터를 보관하고..
:
:  AThread = (TIdPeerThread *) List->Items[Loop];
: 이런 식으로 보관된 객체중 필요한걸 포인터로 땡겨오는거죠.
:
: 4. helpme 함수도 똑같습니다.
: TList 를 정의만 하고 바로 쓰고 있죠.
: 당연히 에러 납니다.
:
: 그런다고 TList *List = new TList ;
: 하면 access violation error 는 안나겠지만.. 님이 원하는데로 동작하진 않습니다.
:
: 5. IdTCPServer1 에서 객체를 어떻게 처리하고 있는지 공부하셔야 됩니다.
: 님 코드 보면.. TThreadList 를 사용해서 처리하고 있는거 같은데..
: 이건  thread 에서 안전하게 사용하게 하기 위한 겁니다.
:
: LockList 해서 Thread에서 안전하게 잠근뒤 TList 형을 얻고..
: 데이터 처리를 하고 UnloackList 로 다른 데서 사용 가능하게 풀어주는 방식으로 씁니다.
:
: 6. List->Count 와 List->Item 이 어떤 역활을 하는지 같은거는..
:    보통은 이름으로 대충 판단하고..
:    헬프를 보고 구체적인 내용을 판단한뒤..
:    그래도 이해가 안되면 테스트 코드를 짜서 확실하게 이해하는 방식으로 접근합니다.
:
:
:
:
:
: 앱돌이 님이 쓰신 글 :
: : 죄송하지만... 조금더 구체적으로 설명해주실 수 있을까요..
: :
: : 깊게 공부를 못한터라 어느 부분을 공부하면 좋을까요 ?
: :
: : 객체 생성부분이 없다는건 어떤 객체를 TIdPeerThread의 객체생성인가요?
: :
: : try{
: :                 for(Loop = 0; Loop<List->Count; Loop++){
: :                         AThread = (TIdPeerThread *) List->Items[Loop];
: :                         AThread->Connection->WriteLn(shiftWork.STX+shiftWork.Line+shiftWork.From+shiftWork.To+shiftWork.Command+shiftWork.SendTime+shiftWork.ResultCode+
: :         shiftWork.Size+shiftWork.HeaderEnd+shiftWork.StnId+shiftWork.McPort+shiftWork.Worker+shiftWork.MegId +shiftWork.ExWorker+shiftWork.ETX);
: :                 }
: :         }__finally{
: :                 IdTCPServer1->Threads->UnlockList();
: :         }
: :
: : 이런식으로 구성하여서 했더니 버튼을 눌렀을때 동작을 합니다.   일반 함수내부에서 사용하려고 했을때 입니다.  이렇게 하니
: : 또 똑같은 오류가 이쪽에서 발생을 합니다.........하................................ 아는분의 조언으로 만든건대 아무 뜻도 모르고 만든거라
: : List->Count와 List->Items는 어떤역할을 하는건가요? 해석좀.....부탁드리겠습니다.
: :
: : oid __fastcall TPBCICT::Helpme(int y)
: : {
: :         int Loop;
: :         TList *List;
: :         TIdPeerThread *AT;
: : try{
: :                 for(Loop = 0; Loop<List->Count; Loop++){
: :                         AT = (TIdPeerThread *) List->Items[Loop];
: :                         AT->Connection->WriteLn(GetInfo("Common","STX")+GetInfo("Common","line")+GetInfo("Common","myid")+GetInfo("Input","To")+GetInfo("Result","Command")+
: :                         GetInfo("Common","SendTime")+GetInfo("Result","ResultCode")+GetInfo("TimeSet","Size")+GetInfo("Common","HeaderEnd")+GetInfo("Input","StnId")+
: :                         GetInfo("Common","McPort")+GetInfo("Common","Worker")+GetInfo("Result",BarcodeSection[y])+GetInfo("Input","ICTModel")+
: :                         GetInfo("Result","TestStartTime")+"^^^^^^^^^^"+GetInfo("Result","PCMCount")+GetInfo("Result","InspResult")+GetInfo("Result","PCMTestTime")+
: :                         "^^"+GetInfo("Result","ItemCount")+GetInfo("Common","ETX"));
: :
: :
: :                 }
: :         }__finally{
: :         IdTCPServer1->Threads->UnlockList();
: :         }
: :
: :
: : Intotheblue 님이 쓰신 글 :
: : : 님 코드 보면..
: : : athread 를 선언만 하고.. 객체 생성하는 부분이 없네요.
: : : 당연히 에라가 날수 밖에 없죠.
: : :
: : : 앱돌이 님이 쓰신 글 :
: : : : 이런식으로 AThread를 써서 송신을 하려고하는대요 자꾸 violation오류가 생깁니다. 화살표 되있는 부분에서
: : : :
: : : : 왜 에러가 생기고 해결방법좀 알려주세요 고수님들 부탁드립니다. ㅜ.ㅠ
: : : :
: : : :
: : : : void __fastcall TPBCICT::Button3Click(TObject *Sender)
: : : : {
: : : :
: : : :         TIdPeerThread *AThread;
: : : :         struct MES shiftWork;
: : : :
: : : :         SaveInfo("shiftWork",Edit8->Text,"ExWorker");
: : : :         SaveInfo("Common",SendTime,"SendTime");
: : : :         shiftWork.STX = GetInfo("Common","STX");
: : : :         shiftWork.Line = GetInfo("Common","line");
: : : :         shiftWork.From = GetInfo("Common","myid");
: : : :         shiftWork.McPort = GetInfo("Common","McPort");
: : : :         shiftWork.To = GetInfo("Input","To");
: : : :         shiftWork.Command = GetInfo("shiftwork","Command");
: : : :         shiftWork.SendTime = GetInfo("Common","SendTime");
: : : :         shiftWork.ResultCode = GetInfo("shiftwork","ResultCode");
: : : :         shiftWork.Size = GetInfo("shiftwork","Size");
: : : :         shiftWork.HeaderEnd = GetInfo("Common","HeaderEnd");
: : : :         shiftWork.StnId = GetInfo("Common","StnId");
: : : :         shiftWork.McPort = GetInfo("Common","McPort");
: : : :         shiftWork.MegId = GetInfo("shiftwork","MegId");
: : : :         shiftWork.ExWorker = GetInfo("shiftWork","ExWorker");
: : : :         shiftWork.ETX = GetInfo("Common","ETX");
: : : : ---->AThread->Connection->WriteLn(shiftWork.STX+shiftWork.Line+shiftWork.From+shiftWork.To+shiftWork.Command+shiftWork.SendTime+shiftWork.ResultCode+
: : : :         shiftWork.Size+shiftWork.HeaderEnd+shiftWork.StnId+shiftWork.McPort+shiftWork.Worker+shiftWork.MegId +shiftWork.ExWorker+shiftWork.ETX);
: : : :
: : : :         if(shiftWork.Worker != shiftWork.ExWorker){
: : : :                 Edit13->Text = "0";
: : : :         }
: : : :         SaveInfo("Common",shiftWork.ExWorker,"Worker");
: : : :
: : : : }

+ -

관련 글 리스트
72770 IdTCPServer에서 Execute에서만 송신을해야하나요? 앱돌이 4048 2015/06/15
72780     주제넘게 조언을 드리자면 오지랖대왕 4182 2015/06/16
72771     Re:IdTCPServer에서 Execute에서만 송신을해야하나요? Intotheblue 4200 2015/06/15
72772         Re:Re:IdTCPServer에서 Execute에서만 송신을해야하나요? (수정)(도와주세요..) 앱돌이 4242 2015/06/15
72774             Re:Re:Re:IdTCPServer에서 Execute에서만 송신을해야하나요? (수정)(도와주세요..) Intotheblue 4194 2015/06/15
72781                 Re:Re:Re:Re:IdTCPServer에서 Execute에서만 송신을해야하나요? (수정)(도와주세요..) 앱돌이 4267 2015/06/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.