Windows46 구조적 예외처리(SEH) 예외처리 : 개념 : 소스코드를 프로그램의 실제 흐름과 그 흐름에 대한 예외처리 영역을 나누어 작성하는것. 사용법 : 1. 종료 핸들러(Termination Handler) : 예외가 발생하여 프로그램이 정상치 못하게 종료되더라도 메모리 반환등의 문제를 해결하기 위하여 사용 __try { // 코드 } __finally { // 종료 처리 } __try 블록을 한 줄이라도 실행하게 되면, 반드시 __finally 블록을 실행한다. (참고 : __try 블록과 __finally 블록 사이에는 어느 문장도 올 수 없다. 반드시 __try 와 __finally 둘다 있어야 한다. 예) #include #include #include int _tmain(int argc, TCHAR *argv[]) { int n.. 2010. 3. 8. 비동기 I/O 와 APC 개념 : 동기 I/O : I/O 작업의 수행을 위해 호출된 함수가 블로킹 상태에 놓이기 때문에 CPU는 블로킹 상태에서 반환될 때까지 일을 하지못한다. 비동기 I/O : I/O 작업의 수행을 위해 함수를 호출하자마자 반환한다. 따라서 CPU는 그다음 작업을 진행한다. 중첩(Overlapped) I/O : 넌블로킹(Non-Blocking) 함수를 이용하여 여러작업을 동시에 진행한다. 함수가 바로 반환되므로 계속 중첩해서 I/O 요청을 할수가 있다. (참고 : 동기 방식(블로킹) I/O 에서는 전송을 위해 할당된 내부 메모리 버퍼에 데이터가 복사가 되면 함수가 반환된다. (데이터 전송이 완료될 때 반환되는 것이 아니다) OVERAPPED 구조체 typedef struct _OVERLAPPED { ULONG_.. 2010. 3. 8. 디렉터리 컨트롤 디렉터리의 생성과 소멸 : BOOL CreateDirectory( LPCTSTR lpPathName, // 생성하려는 디렉터리 이름 LPSECURITY_ATTRIBUTES lpSecurityAttributes // 보안속성 ); BOOL RemoveDirectory( LPCTSTR lpPathName // 소멸하려는 디렉터리 이름 ); (참고 : 절대경로 지정시 마지막 디렉터리만 생성한다. 즉, C:\\AAA\BBB 일때 (AAA 디렉터리는 존재하지 않는다) 컴퓨터는 절대로 AAA 디렉터리를 만들어 주지 않는다. 따라서 BBB 디렉터리도 만들어지지 않는다. AAA 디렉터리가 존재해야 BBB 디렉터리가 생성된다. 현재 디렉터리, 시스템 디렉터리, Windows 디렉터리 : 현재 디렉터리(Current Di.. 2010. 3. 8. 파일 I/O 파일 열기 : HANDLE CreateFile( LPCTSTR lpFileName, // 개방(open)할 파일 이름 DWORD dwDesiredAccess, // 읽기/쓰기 모드를 지정한다.(or (l) 연산으로 결합) GENERIC_READ : 읽기 모드 GENERIC_WRITE : 쓰기 모드 DWORD dwShareMode, // 파일 공유방식 0 : 다른 프로세스에 절대 공유 불가. 중복 개방 불가 FILE_SHARE_READ : 다른 프로세스에서 동시 읽기 접근 가능 FILE_SHARE_WRITE : 다른 프로세스에서 동기 쓰기 접근 가능 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 보안 속성 DWORD dwCreationDisposition, // 파일의.. 2010. 3. 8. 가상 메모리(Virtual Memory) 개념 : (가정 : 16비트 시스템(0 ~ 64K -1 주소), 프로세스별로 64KB의 가상 메모리 할당, 메인 메모리 16KB) MMU(Memory Management Unit) : 실제로 존재하는 메모리 크기를 가상 메모리 크기만큼 존재하는 것처럼 CPU가 느끼도록 컨트롤 한다.(ex. 1GB 램의 메모리를 4GB의 메모리가 존재하는 것처럼 CPU가 느끼도록 한다) 가상 메모리 구성에 필요한 시스템의 기본 기능(메모리 할당 및 변환)을 제공한다. (CPU와 함께 하나로 패키징(Packaging) 되있다) CPU - > MMU : 메인 메모리에서 사용되지 않는 메모리 블록 하나를 골라서 할당 (1K부터 20바이트 할당요청) 20바이트를 할당 요청했음에도 메모리 블록은 4K 바이트 단위라서 4 K 를 할.. 2010. 3. 7. 쓰레드(Thread) 동기화 예제 소스 메모리 접근 동기화 : 1. 크리티컬 섹션(Critical Section) 기반의 동기화 - 유저 모드 2. 인터락 함수(Interlocked Family Of Function) 기반의 동기화 - 유저 모드 3. 뮤텍스(Mutex) 기반의 동기화 - 커널 모드 4. 세마포어(Semaphore) 기반의 동기화 - 커널 모드 5. 이름있는 뮤텍스(Named Mutex) 기반의 프로세스 동기화 - 커널 모드 실행 순서의 동기화 : 1. 이벤트 기반의 동기화 2. 이벤트 + 뮤텍스 동기화 2010. 3. 6. 이전 1 2 3 4 5 ··· 8 다음