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
[67222] Re:비동기 IO 관련하여 질문 드립니다.
Lyn [tohnokanna] 1726 읽음    2012-05-16 15:16
똑같은글 여기도 올라왔네 =_=a 먼저본게 뎁피아니 거기다 답 달게요.

Hun_ 님이 쓰신 글 :
: 대용량 파일(4GB)을 읽으려 합니다. 파일을 읽을 때 비동기 방식을 이용하여 읽기 시간을 단축하려고 합니다. CreateFile과 ReadFile를 이용하여 테스트한 결과 일반적인 방식(동기 방식)과 비동기 방식의 차이점이 없습니다.
:
: 아래의 코드와 같이 CreateFile을 이용하여 파일을 연후 ReaFile 을 이용하여 읽고 있습니다. 일반적인 방식(동기 방식)과 비동기 방식은 CreateFile에서FILE_FLAG_OVERLAPPED와 ReadFile에서 OVERLAPPED 구조체 사용만이 다릅니다.
:
: 궁금 사항
:
: 1. 비동기 방식 사용법이 잘못 된 것인가요?
:
: 2. ReadFile이 완료를 알기 위해 GetOverlappedResult를 사용하였는데 이 부분에서 비동기 방식의 이점인 논블록 효과가 없어집니다. 사용이 잘못 되었나요?
:
: 3. ReadFile의 경우 일반적인 방식(동기 방식)과 비동기 방식의 차이점이 없는 것인가요?(WriteFile의 경우 시간을 단축할 수 있었습니다. GetOverlappedResult를 사용안함.)
:
: 4. IOCP(CreateIoCompletionPort)를 이용하려고 합니다. 단일 파일의 경우 아래의 링크에서 효과가 없다고 하는데 사용하게 된다면 정말 효과를 볼 수 없을까요?
:
: (http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=630180&ref=630161)
:
: 5. 실제 비동기적 효과를 보기 위해서는 가장 효과적이며 일반적인지 궁금합니다.
:

: 아래의 코드는 샘플 입니다. 형식은 상관없습니다.
:
: --------------------------------------------------------------------------------------------------
: 비동기 방식 코드
: --------------------------------------------------------------------------------------------------
: HANDLE hFile = CreateFile(_T(“C:\4G_test”),
:     GENERIC_READ | GENRIC_WRITE,
:     FILE_SHARE_READ | FILE_SHARE_WRITE,
:     NULL,
:     OPEN_EXISTING,
:     FILE_FLAG_OVERLAPPED,
:     NULL);
:
: OVERLAPPED cbOv = {0};
:
: while(cbOv.offset < 파일 사이즈)
: {
:     ReadFile(hFile, lpBuffer, uBufferSize, &dwRead, &cbOv);
:     if(GetLastError() != ERROR_IO_PENDING)
:         return FALSE;    // ReadFile Error
:
:
:     GetOverlappedResult(hDevice, &cbOv, &dwRead, TRUE);
:
:     ...
:     cbOv.offset += dwRead;
: }
:
: --------------------------------------------------------------------------------------------------
: 일반 방식(동기 방식) 코드
: --------------------------------------------------------------------------------------------------
:
: HANDLE hFile = CreateFile(_T(“C:\4G_test”),
:     GENERIC_READ | GENRIC_WRITE,
:     FILE_SHARE_READ | FILE_SHARE_WRITE,
:     NULL,
:     OPEN_EXISTING,
:     FILE_ATTRIBUTE_NORMAL,
:     NULL);
:
: OVERLAPPED cbOv = {0};
: BOOL bRead;
:
: while(cbOv.offset < 파일 사이즈)
: {
:     bRead = ReadFile(hFile, lpBuffer, uBufferSize, &dwRead, NULL);
:     if(!bRead)
:         return FALSE;    // ReadFile Error
:    
:     ...
:    
:     cbOv.offset += dwRead;
: }
:
: 감사합니다.

+ -

관련 글 리스트
67221 비동기 IO 관련하여 질문 드립니다. Hun_ 1935 2012/05/16
67222     Re:비동기 IO 관련하여 질문 드립니다. Lyn 1726 2012/05/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.