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
[50397] TList에 Error....
고구마 [] 1248 읽음    2007-08-28 10:02
안녕하세요 고수님들 도움을 요청합니다
다름이 아니라 서버를 개발하고 있는데 클라이언트 관리를 TList로 합니다
지금 현재는 테스트 중인데 타이머 인터발을 50으로 주고 모든 클라이언트에 데이터를 보냅니다
그리고 클라이언트는 접속 되자 마자 그 데이터를 받게 되고 데이터를 받은 클라이언트는
다시 서버로 결과값을 넘깁니다
단순히 서버의 테스트를 위해서 인터벌을 50으로 준건데 문제는
보내는 클라이언트를 하나 추가할때 밑에 이런 메시지가 뜹니다

에러내용
Classes 파일에
raise EListError.CreateFmt(Msg, [Data]) at ReturnAddr;

인터발을 500으로 주게 되면 클라이언트 40 커넥션정도에서 발생하고 50으로 주게 되면 2커넥션에서
발생합니다

클라이언트가 연결되자마자 리스트에 추가하고 바로 데이터를 보내게 되는데 시간적 여유가 없어서
메모리가 엉킨건지는 모르겠지만 상용 서버라면 이정도 테스트를 무난히 패스할수 있어야 한다고 생각하는데요
잘 안되네요
아 그리고 IOCP입니다

소스는 간단히
   m_pInfoListLock->Enter();
    INT32 nClientMax = m_pClientInfoList->Count;

    for(INT32 i=0; i<nClientMax; i++)
    {
        if((ClientInfo*)m_pClientInfoList->Items[i])
        {
            SendData((ClientInfo*)m_pClientInfoList->Items[0], pData, nDataLen);
        }
        else
        {
            ShowMsgBox("CIOCPSWin::SendDataAll : ppClientInfoList","ERROR_MEMORY_NULL");
            m_pInfoListLock->Leave();
            return ERROR_MEMORY_NULL;
        }
    }
    m_pInfoListLock->Leave();
이렇게 되고요 

SendData 에서는
            bool bSuccess = PostQueuedCompletionStatus(m_hCompletionPort,
                                pOverlapBuff->GetSendBufferCnt(),
                                    (DWORD) pClientInfo, &pOverlapBuff->m_overLapp);

이렇게 해서 IOCP 큐에 등록해서 사용합니다 원하신다면 풀소스를 드리겠습니다
해결방법이나 혹은 비슷한 경험담이라도 좋으니 답변해주시면 감사하겠습니다

+ -

관련 글 리스트
50397 TList에 Error.... 고구마 1248 2007/08/28
50398     Re:TList에 Error.... 장성호 1115 2007/08/28
50401         [질문]Re:Re:TList에 Error.... 고구마 1325 2007/08/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.