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
[22239] 음..답이 될런지 몰겠지만.
육성수 [siral] 729 읽음    2002-10-25 13:30
비동기 소캣으로 사용하고 싶으시다고 하셨는데 (저는 5.0)

쓰레드를 사용하고 싶으시다면 제가 하는 방법은. 스레드를 만들어서 연결된 소캣의 포인터를 넘겨주고 계속해서 소캣을 버퍼을 체크하는 로직을 돌리면서 사용하는 방법이 있구요

이건 간단히 쓰레드 만들어 돌리는 방법과 그리고 소캣에 포함된(TClientSocket->Socket->?)뭔가 있을꺼에요 이것만 이용할줄 알면 금세 만들어 버리구요

그리고 비동기는 이벤트를 발생해 주거든요 클라이언트의 소캣의 프로퍼티를 보면..비동기로 설정하는 부분이 있을꺼에요..

그리고 나서 이벤트들을 받으면..받을수 있을껍니다.

그런데..제가 사용해 본 결과(저의 실수 일수도 있지만) 클라이언트에서 처리하는 속도보다 소캣의 버퍼에 쌓이는 속도가 더 빠그면..어느순간.. 이벤트가 발생하지 않는 결과가 생기더군요..
글케 되면..와도 왔다는 이벤트가 발생하지 않는거죠 프로그램이 가만히 멍하고 쳐다봐야 되는 거죠


왠지는 모르지만...그래서 저도 항상..쓰레드로 일부러 돌려 주걸랑요..버퍼를 체크하고 버퍼가 한 8kbye인가..지금은 정확히 생각은 안나는데. 그 순간을 다 채우지 않도록 체크하는 로직이 필요 하지만..간단한 거라면. 그것까지는 생각지 않으셔도 될듯 싶네요...하여간..글케 해줌..안죽더군요..

아마 어느정도의 데이타라면..처리 해줄수 있을꺼에요...

만약..많은 양이라면...

전..전에..한..20만개의 패킷을 처리하는데..

서버쪽에서는 죽어라고..패킷을 보내고...

클라이언트에서는.. 죽어라고 처리해야 되죠...

그때는 죽더군요..보내는 양보도 처리하는 속도가 떨어지다 보니깐..

어느정도에서 받다가..죽어 버리더군요..

그래서 저는 쓰레드 두개에 리스트 하나 사용했어요..

하나의 쓰레드는 들어오는 값을 리스트에 계속 쌓아 주공..

하나의 쓰레드는 그 리스트에서 값을 꺼내서 처리해주는 거죠..

그럼..안죽더라구요...속도도..느리긴 하지만..죽지는 않아요..다행이도..^^

그런데..서버하고 클라이언트하고 싱크를 맞추어야 된다면..약간의 문제는 발생할수 있죠..^^

저도 아직은..초짜라서요...하지만..저도 이것땀시..한동안..고생좀 해서..다른 님들은 혹시 같은 고생을 할까 하고 잘은 모르지만 몇자 적어 봅니다.

참고로..혹시 왜 죽는지 아시는분은 리플좀 달아 주세요..^^

+ -

관련 글 리스트
22203 고수님들 쓰레드을 이용한 비동기 소켓 Client을 구성하려 합니다. 방법을 좀 가리켜주세요..제발 ryuee 747 2002/10/24
22239     음..답이 될런지 몰겠지만. 육성수 729 2002/10/25
22204     Re: 비동기소켓은.. 김상구.패패루 871 2002/10/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.