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
[4850] Re:[재질문] TServerClientThread
한꼬맹이 [] 3382 읽음    2001-01-10 13:40
김나솔 님이 쓰신 글 :
: 답변 감사드리구요 ^^
: 또 질문드릴께요.
: 답변해주신 님이 Indy Winshoes를 추천해주셨는데, 요 TServerClientThread를
: 일단 사용해보구 나서, Indy 를 써봐야겠어요. 당장은 급해서..그리고
: TClientSocket도 막 썼는데, Indy싸이트 가서 보니깐 C++builder에서 제공하는
: 인터넷 콤포넌트하곤가? 암튼. 먼가 같이 사용할 수 없다고..
:
: 다시 질문드리는 건요,
: 제가 어떻게 했냐면요.
:
: TServerSocket *ServerSocket;
: //을 생성해놓구 ACtive시켰어요.
:
: //OnGetThread 이벤트 핸들러에서
: void __fastcall TCommand::ServerSocketGetThread(System::TObject* Sender, TServerClientWinSocket* ClientSocket, TServerClientThread* &SocketThread)
: {
:   SocketThread = new TMyServerClientSOcket(false, ClientSocket, this);
: }
: 쓰레드를 생성해주었구요.
:
: void __fastcall TMyServerClientThread::ClientExecute(void)
: {
:   while..
:     try..
:       //요기서 TWinSocketStream을 선언해서 수행할 코드를 써주었거든요.   
:        //클라이언트로부터 데이터를 일부분 받아들여서 원하는 파일을 업로드.
: }
:
: 그런데, 제가 파악한 바로는 클라이언트가 접속해올 때마다 OnGetThread이벤트가 발생해서,
: 그때 그때 새로운 쓰레드를 생성해서, 그 쓰레드가 클라이언트와의 작업을 ClientExecute함수
: 내에 코드대로 수행을 하는 거 같거든요? 근데, 한번 클라이언트가 접속해오면 OnGetThread
: 이벤트가 발생하고, 수행이 끝나면 쓰레드가 사라지고, 다시 클라이언트가 접속해오면
: 새로운 쓰레드 생성 즉 OnGetThread이벤트가 발생해얄 거 같은데, 생성시켜주는 데로 가지
: 않고, 바로 ClientExecute가 불리더라고요. 이궁..
: 제가 잘못 이해하고 있으면 좀 지적해주시면 감사하겠습니다 ^^
:
: 그리고 또 질문은 이벤트 핸들러의 매개변수에서 TServerClientThread* &SocketThread
: 에서 * & 요거 있잖아요. 참조자인가요? 참조자를 이해하는 거를 회피해서 --; 잘 모르는..
: SocketThread를 생성해주면 이 주소를 TServerWinSocket가 관리하는 ActiveThread 리스트
: 같은 거에 추가가 되는 건가요?
:
: p.s: 정리되지 않은 질문 죄송하고, 바로 답변해주셔서 감사합니다.

안녕하십니까?

한꼬맹이 입니다.

빌더의 서버소켓컴포넌트에는 ThreadCacheSize라는 프러프티가 있습니다. 이놈이 뭘하느냐 하면

캐쉬로 이용할 쓰레드개수를 지정하는 겁니다. 즉 클라이언트가 요청될때 마다 쓰레드를 만들고

연결이 끝날때마다 그 쓰레드를 해제하면 많은 오버헤드가 생기기 때문에 캐쉬크기만큼은

클라이언트 접속이 끊겨도 쓰레드를 해제하지 않고 다른 클라이언트 접속이 생기면 기존의 캐쉬된

쓰레드를 재활용하기 위한 것입니다. 그래서 항상 클라이언트 접속이 있다고 해서 새로운 쓰레드

가 생성되는 것은 아닙니다.

TServerClientThread* &SocketThread 에서 TServerClientThread클래스 자체가 포인터인 참조변수라

고 이해하시면 되고요.. 여기서 할당된 값은  ActiveThreads 값을 하나 증가 시켜줍니다.

그럼 참고하세요....
  

+ -

관련 글 리스트
4849 [재질문] TServerClientThread 김나솔 3169 2001/01/10
4850     Re:[재질문] TServerClientThread 한꼬맹이 3382 2001/01/10
6099         Re:Re:[재질문] TServerClientThread 조경달 3289 2001/03/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.