Windows Overlapped Read할때 Timeout구현 문제...
글쓴이: jic5760 / 작성시간: 토, 2016/12/03 - 11:04오후
안녕하세요.
ReadFile을 Timeout을 지원하도록 소스를 짜고 있는데 한가지 문제점이 발생합니다.
CancelIoEx부분은
https://msdn.microsoft.com/ko-kr/library/windows/desktop/aa363789(v=vs.85).aspx
이걸 참고했습니다.
아래처럼 소스를 짰는데 랜덤하게 데이터를 읽어오지 못하는 (버려져버리는)문제가 발생합니다.
어떻게 고쳐야 할지 모르겠네요...ㅠㅠ
ReadFile을 기다리지 않는다고 왜 데이터까지 버려지는지...
int readStdout(char *pbuffer, int bufsize, DWORD *pdwReadLen, DWORD dwTimeout) { const DWORD PollInterval = 100; int retval = 0; DWORD dwWaitRst; BOOL bRst; DWORD dwErr; BOOL bIoComplete = FALSE; DWORD waitTimer; OVERLAPPED ov = {0}; ov.hEvent = m_hStdoutRdEvent; bRst = ReadFile(m_hStdoutRd, pbuffer, bufsize, pdwReadLen, &ov); if(!bRst) { do { dwErr = GetLastError(); if(dwErr != ERROR_IO_PENDING) { retval = -((int)dwErr); break; } dwWaitRst = WaitForSingleObject(m_hStdoutRdEvent, dwTimeout); if(dwWaitRst == WAIT_OBJECT_0) { bRst = GetOverlappedResult(m_hStdoutRdEvent, &m_comm_StdoutOverlapped, pdwReadLen, FALSE); if(bRst) { retval = 1; }else{ dwErr = GetLastError(); retval = -((int)dwErr); } }else if(dwWaitRst == WAIT_TIMEOUT) { retval = 0; }else{ dwErr = GetLastError(); retval = -((int)dwErr); } }while(0); }else{ retval = 1; } return retval; }
Forums:
되나보네요...?
글을 작성하고 소스를 좀 수정했는데 위와 같이 하니 되는거 같네요~ 혹시 소스에 문제가 있다면 알려주세요~
어떻게 해결되셧는지요?
저도 랜덤하게 readfile에서 잘려서 나옵니다..
도와주십시오..
참고해보세요.
- 잘된 예제를 참고해보세요.
- 해당 함수에 인자값. 리턴값. 오류값을 확인해보세요.
- 오류가 발생한 코드를 모두 지우고. 잘 되는것만 확인 해보세요.
ReadFile
https://www.joinc.co.kr/w/man/4200/ReadFile
ReadFile function
https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-readfile
GetOverlappedResult
https://www.codeproject.com/search.aspx?q=GetOverlappedResult&x=13&y=8&sbo=kw
GetOverlappedResult function
https://docs.microsoft.com/en-us/windows/desktop/api/ioapiset/nf-ioapiset-getoverlappedresult
Testing for the End of a File
https://docs.microsoft.com/ko-kr/windows/desktop/FileIO/testing-for-the-end-of-a-file
시리얼 통신_OVERLAPPED 구조체를 이용해 비동기 쓰기를 해보자
http://goodjian.tistory.com/entry/시리얼-통신OVERLAPPED-구조체를-이용해-비동기-쓰기를-해보자
비동기 I/O 와 APC
http://dakuo.tistory.com/108
Windows IOCP vs Linux EPOLL Performance Comparison
https://www.slideshare.net/sm9kr/iocp-vs-epoll-perfor?next_slideshow=1
IOCP 서버 코어 및 채팅서버 실무 고급 자료
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=278&MAEULNO=20&no=32322&page=2
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기