API IPC - 메시지 정보를 교환할 수 있는 가장 간단한 방법이며 가장 빠른 방법이다. 두 프로세스가 서로 윈도우 핸들만 알고 있다면 약속된 메시지를 wParam, lParam 을 통해 정보를 교환할 수 있다. 메시지는 메모리를 거치지 않고 OS에 의해 직접 전달되므로 주소 공간이 격리되어 있더라도 잘 전달된다. 정수같이 비교적 크기가 작은 정보를 전달할때만 사용할 수 있다. 정보라기 보다 어떤 사실을 통보하기 위한 목적으로 사용할 수 있다. 예로 지금 종료하라던가, 새로 데이터를 읽어라든가 등등의 명령 정도는 이 방법으로 쉽게 전달할 수 있다. 그러나 문자열이나 구조체 같은 큰 데이터는 전달 할 수 없다. 왜냐하면 메시지와 함께 전달되는 wParam, lParam은 둘 다 더해봐야 불과 8바이트에 ..
API IPC 종류 IPC 선택 고려사항 1. 네트워크 지원이 필요한가? 곧 컴퓨터의 경계를 넘어서는 통신인가? 2. 통신 대상이 다른 운영체제에서 실행되는 프로그램인가? 곧 플랫폼 경계를 넘야 하는가? 3. 통신 대상이 고정되어 있는가 아니면 불특정 다수와 통신해야 하는가? 4. 통신 속도가 중요한가 아니면 느려도 상관 없는가? 5. 일회적인 교환인가 지속적인 교환인가? 6. 양방향 통신인가 아니면 단방향 통신인가? 7. 통신의 신뢰성 및 보안성이 요구 되는가? 방법 설명 메시지 사용자 정의 메시지로 정보 교환, 길이에 제약이 있다. 클립보드 중앙 저장소를 통한 대량의 정보 교환, 일반적인 용도로는 쓸 수 없다. DDE DDE 메시지를 사용한 지속적인 정보 교환 파일맵핑 파일 맵핑을 이용한 메모리 공유..
API 메시지 루프 프로그램을 비 스레드로 무한루프(while(1)) 로 만들면 프로그램이 멈추지만, 메시지 루프는 WM_QUIT 메시지를 받을때까지 무한 루프로 동작하는데 왜 멈추지 않는지 이유를 몰랐다. 그냥 막연히 스레드로 동작하는가 보다 생각했는데 그게 아니다. 1 2 3 4 5 6 7 8 while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } Colored by Color Scripter cs 메시지가 발생하면 OS(윈도우즈)는 시스템 메시지큐에 저장하고 다시 각 응용 프로그램의 메시..
DDE (Dynamic Data Exchange) 윈도우즈3.1 부터 지원, Win32환경에서는 어울리지 않으며 다른 IPC로 대체 가능하다. 메시지는 프로세스 간의 통신의 가장 기본적이고 쉬운 방법이나 전달할 수 있는 파라미터가 wParam, lParam 을 다 더해도 64bit 밖에 되지 않기 때문에 크기가 큰 데이터는 전달할 수 없는 단점이 있다. 이에 반해 DDE는 메시지 파라미터를 통해 대용량 데이터를 전달하기 위한 규약이며 내부적으로는 글로벌 아톰(ATOM)과 공유 메모리에 의해 구현된다. DDE대화는 응용 프로그램간에 이루워 지지만 대화를 하는 기본 주체는 윈도우이다. 응용프로그램은 복수의 대화에 참여할 수도 있는데 서버이면서 동시에 클라이언트가 될 수도 있다. 이때 각 대화마다 별도의 윈도..