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

카일릭스 Q&A
[75] Re:Re:답변 감사합니다..(내용無)
도움말 [] 1976 읽음    2002-08-29 20:38
주만호 님이 쓰신 글 :
: 도움말 님이 쓰신 글 :
: : 먼저 이 질문을 읽어 주시는 님께 감사드립니다.
: :
: : Kylix2로 클라이언트(약 50대)에서 한 라인의 메시지를 서버로 보내면
: :
: : 서버는 보내온 메시지를 그대로 리스트박스에 출력하는 프로그램을 테스트 하고 있습니다.
: :
: : 사용된 프로시져는 아래에 있는게 전부 입니다.
: :
: : 윈도우에 이 서버 프로그램을 설치해서 테스트하면 클라이언트에서 보내온 메시지를
: :
: : 지연시간없이 바로 리스트박스에 뿌려주던데 리눅스에 설치하고 테스트하니까
: :
: : 클라이언트에서 보내온 메시지가 엄청 늦게 보여집니다.
: :
: : 운영체제에 따른 차이가 있는지 아님 다른 문제인지
: :
: : 고수님들의 조언 부탁드립니다. 꼭이요..
: :
: :
: : procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
: : var
: :     str: string;
: : begin
: :     with AThread.Connection do
: :     begin
: :         str := ReadLn;
: :         if SameText(str, 'bye') then
: :         begin
: :             Disconnect;
: :         end
: :         else if str <> '' then
: :         begin
: :             ListBox1.Items.Add(str);
: :         end
: :     end;
: : end;
: :
: : procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
: : begin
: :     AThread.Connection.WriteLn('하이!!');
: : end;
: :
: : procedure TForm1.FormCreate(Sender: TObject);
: : begin
: :     IdTCPServer1.Active := true;
: : end;
:
: TIdTCPServer 의 OnExecute 이벤트는 어플리케이션의 메인 쓰레드가 아닌,
: TIdTCPServer 에서 생성한 TIdPeerThread 에서 호출됩니다.
:
: 따라서 ListBox1 와 같은 전역 객체에 접근 할 때는 반드시 CriticalSection 같은
:
: 객체를 써서 동기화 해 주셔야 합니다.
:
: 물론 이 얘기는 윈도우에서도 마찬가지이지만, 특히 리눅스에서 더욱 엄격합니다.
:
: CS : TCriticalSection; // uses 에 SyncObjs 를 추가하셔야합니다.
:
: CS.Acquire;
: try
:   ListBox1.Items.Add(str);
: finally
:   CS.Leave;
: end;
:
: 이런 방식으로 코딩하세요.

+ -

관련 글 리스트
74 Re:TIdTCPServer 에 대한 질문입니다. 주만호 2604 2002/08/29
75     Re:Re:답변 감사합니다..(내용無) 도움말 1976 2002/08/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.