programing150 비동기 + IOCP + 파일 출력 작업 Overlapped 구조체와 버퍼를 독립적으로 사용하여 진행하며 쓰레드 만큼 데이터 풀을 만들어서 진행을 해야 하는 건지 Overlapped 구조체를 확장하여 atomic 변수를 추가 한 다음 스핀락을 써서 Overlapped 구조체와 버퍼의 사용을 대기 시키는 식으로 진행 하였다. 입출력 하는 크기가 짧으면 문제가 잘 안보일 수도 있지만 크기가 크다면 (나의 경우 1.6킬로바이트) io 처리도 완료되기 전에 수정할 수 있어서 데이터가 겹쳐서 저장되거나 하는 문제가 생길 수 있다. ps.비동기 통신 예제를 보면 같은 Overlapped 구조체와 버퍼를 활용하는데 생각해보면 받고 -> 처리하고 -> 다시 사용 하는 구조여서 IO처리가 끝나기전에 사용한 Overlapped나 버퍼를 이용하지 않기에 큰 문제가.. 2017. 3. 6. APC(Asynchronous Procedure Call) - 비동기 함수 호출 - Complete Routine도 APC 활용 - ReadFileEx(), WriteFileEx(), SetWaitableTimer()도 APC 메커니즘 기반 - APC Queue> 비동기 입출력 결과 저장을 위해 운영체제가 각 쓰레드마다 할당하는 메모리 영역> 비동기 함수 호출 메커니즘 의미> 모든 쓰레드는 자신만의 APC Queue를 가지고 있고 쓰레드 별로 독립적임> 쓰레드가 알림가능 상태에 놓이게 될 때 호출 됨 - Alertable wait> 비동기 입출력을 위한 특별한 대기 상태, 비동기 입출력 함수를 호출한 쓰레드가 이 상태에 있어야만 완료 루틴이 호출 될 수 있음 >Sleep() : Wait가 시작되는 시점 부터 Wait가 끝나는 시점까지 CPU시간을 사용하지 않음 .. 2017. 2. 23. 쓰레드 풀 - WaitForSingleObject()로 Event 핸들 넣어서 대기 - 일(함수 포인터)이 생기면 일을 넣고 Event핸들로 깨움cf. 다른 동기화 기법을 사용할 수 있을까 생각 했는데 Event만 원격으로 쓰레드를 자유자재 컨트롤 가능 (같은 조건에서 루프를 계속 돌리다가 멈춘다던가...) cf. 크게 상관이 없으면 다른 동기화 기법을 이용해도 무리는 없을 것 같음 - 일을 풀에 등록할 때는 메인 쓰레드와 워커 쓰레드가 race condition이 될 수 있으므로 동기화 기법 필요 - 이벤트 기반 동기화의 이해 필요 2017. 2. 23. VLD(Visual Leak Detector) 사용법 vld.lib 등록한 다음 실행파일 위치에 vld_x86.dll(vld_x64.dll), dbghelp.dll, 'Microsoft.DTfW.DHL.manifest'을 넣어 놓고 vld.h vld_def.h 위치를 설정하고 vld.h를 인클루드 하면 된다. ps. vld를 제거 했는데 속성에 남아서 상속이 된게 귀찮다면 속성 관리자 -> Microsoft.CppWin32.user에서 추가 포함된 디텍터리, 라이브러리 디렉터리 등을 설정해준다 ps. crtdbg 대신 vld를 사용하는 이유 : The main difference between the CRT Debug Library and VLD, is that Visual Leak Detector shows you the complete callstack.. 2017. 2. 22. 이전 1 ··· 10 11 12 13 14 15 16 ··· 38 다음