서버하나 짜다가 고스트 클라이언트가 필요해서 만들어봤는데
일단 CSocket을 사용하다보니까 문제가 발견 되었다.
CSocket.send와 CSocket.Recieve 함수를 사용하는 경우 내부에서 쓰레드가 돌기 때문에
외부 쓰레드에서 제어하는 경우 뻗어버린다. 이를 위해서 CSocket.Detach 함수를 통해 CSocket 쓰레드를
중단시키고 얻어진 핸들을 이용해서 (핸들이란게 SOCKET이다) 내가 만든 쓰레드를 통해
send, rcev 시켜주면 된다. CSocket 함수가 아니라 윈속에 있는 함수로 써야한다.
BOOL Socket::Detach()
00830 {
00831 if (!DeleteByHandler())
00832 return false;
00833 if (m_pThread)
00834 return false;
00835 if (m_detached)
00836 return false;
00837 SetDetach();
00838 return true;
00839 }
다르게 보면 저런식이 원류라고 할 수 있지 않을까라는 생각도 했지만..
암튼 다 만들어보니 편하구나. 10ms 데이터 송수신을 처리하는 건 문제가 많았지만 ㅋㅋㅋ
(현재 하드로는 어려울 듯 하다)
www.gamehon.com www.gamemotor.com
일단 CSocket을 사용하다보니까 문제가 발견 되었다.
CSocket.send와 CSocket.Recieve 함수를 사용하는 경우 내부에서 쓰레드가 돌기 때문에
외부 쓰레드에서 제어하는 경우 뻗어버린다. 이를 위해서 CSocket.Detach 함수를 통해 CSocket 쓰레드를
중단시키고 얻어진 핸들을 이용해서 (핸들이란게 SOCKET이다) 내가 만든 쓰레드를 통해
send, rcev 시켜주면 된다. CSocket 함수가 아니라 윈속에 있는 함수로 써야한다.
BOOL Socket::Detach()
00830 {
00831 if (!DeleteByHandler())
00832 return false;
00833 if (m_pThread)
00834 return false;
00835 if (m_detached)
00836 return false;
00837 SetDetach();
00838 return true;
00839 }
다르게 보면 저런식이 원류라고 할 수 있지 않을까라는 생각도 했지만..
암튼 다 만들어보니 편하구나. 10ms 데이터 송수신을 처리하는 건 문제가 많았지만 ㅋㅋㅋ
(현재 하드로는 어려울 듯 하다)
www.gamehon.com www.gamemotor.com
'Game Programming' 카테고리의 다른 글
Data Packing Tool (0) | 2008.09.18 |
---|---|
키 이벤트에 따른 속도저하 (0) | 2008.08.29 |
redefinition; different subscripts C2369 (0) | 2008.05.29 |
template error C2143 (0) | 2008.05.19 |
헤쳐모여 알고리즘과 테스트 (0) | 2008.04.08 |