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
[59060] Re:Re:해결했습니다..
용맨소녀 [doyongid] 1157 읽음    2009-11-11 15:08
제가 바보같은 실수를 했군요..ㅡ.ㅡ

Unlocklist() 위치가 잘못되었습니다.


흑흑 님이 쓰신 글 :
: 타이머 에서 for문 돌리셨군요..
: 상관은 없구요..
:
: for문 동안은 당연히 cpu 100% 잡아 먹으꺼구요...
: 약간의 지연 딜레이만 넣어주시면 될꺼 같은데요...
:                      break;
:                  }
:              }
:          }

:          TCPServer->Contexts->UnlockList();
:                                 ::Sleep(1);  // Sleep 값은 적당히 넣으세요.. 밀리세컨드 단위임..
:
:      }
:  }
:
: Sleep 시간만큼 cpu에 시간을 돌려줌...
: 오래 돌리는게 아니면 상관없다라고 생각이 들지만...
: 100% 잡아먹으면 기분상 문제있는 프로그램같이 보이기 때문에   그냥 Sleep 넣어주세요.
:
: 용맨소녀 님이 쓰신 글 :
: : 아래와 같이 클라이언트가 접속 한 후 5분이 지나면 자동으로 접속을 끊도록 구현하려는데요..
: :
: : 아래 루틴이 실행되면 서버의 CPU사용률이 100%로 되는 것 같습니다. 패킷이 오고가는건 되는 것 같습니다만.. 원인과 해결책이 무엇일까요?
: :
: : 별도의 쓰레드를 쓰는 것은 없고요.. 접속하고 패킷 하나 서버로 보내고 그걸로 끝입니다. 패킷을 보내고 접속을 끊어야 하는데, 안끊기는 경우가 간혹 있어서 일정시간이 지나면 서버차원에서 자동으로 접속을 해제하려고 하는거거든요..
: :
: : 접속을 해제할 클라이언트 판별은 접속시 Connection의 Tag에 카운트를 매겨서 구현하고 있습니다.
: :
: :
: : void __fastcall TWin_Main::Timer_DisconnectTimer(TObject *Sender)
: : {
: : 	DWORD		Timer;
: : 	TIdContext 	*lpContext;
: : 
: : 	if(!Timer_Disconnect->Enabled)
: : 		return;
: : 
: : 	Timer	= GetTickCount();
: : 
: : 	for(int i = 0; i < MAX_PLAYER; i++)
: : 	{
: : 		if(stPlayer[i].Timer == 0)
: : 			continue;
: : 
: : 		// 타이머 오류 교정
: : 		if(Timer < stPlayer[i].Timer)
: : 			stPlayer[i].Timer	= Timer;
: : 
: : 		// 시간이 지났다.
: : 		if(Timer - stPlayer[i].Timer > DISCONNECT_TIMER)
: : 		{
: : 			TList *LockList = TCPServer->Contexts->LockList();
: : 
: : 			for(int j = 0; j < LockList->Count; j++)
: : 			{
: : 				lpContext = (TIdContext *)(LockList->Items[j]);           // get client-object
: : 
: : 				if(i == lpContext->Connection->Tag)
: : 				{
: : 					lpContext->Connection->Disconnect();
: : 
: : 					break;
: : 				}
: : 			}
: : 		}
: : 
: : 		TCPServer->Contexts->UnlockList();
: : 	}
: : }
: : 

+ -

관련 글 리스트
59048 인디10 서버에서 시간초과시 자동으로 접속 끊기.. 용맨소녀 1013 2009/11/11
59060         Re:Re:해결했습니다.. 용맨소녀 1157 2009/11/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.