IX : GUI 소켓 응용 프로그램
TCP/IP 윈도우 소켓 프로그래밍 을 읽고 정리한 문서입니다 ;)
GUI 응용 프로그램
GUI 응용 프로그램의 핵심 특징은 메시지 구동 구조라는 것이다. 여기에서 메시지는 윈도우 운영체제가 응용 프로그램의 외부 혹은 내부에 변화가 발생했을 때 해당 응용프로그램에 알리는 데 사용하는 개념이다.
외부에서 메시지를 발생시키는 이벤트가 발생하면, 운영체제가 관리하는 시스템 메시지 큐에 정보가 저장된다. 이후 각 GUI 응용 프로그램은 자신의 응용 프로그램 메시지 큐를 이용해서 이 메시지를 전달받아, 하나씩 처리하고 메시지가 없을 때는 대기한다.
메시지를 받았을 때 동작을 결정하는 코드를 흔히 메시지 핸들러라고 부른다. 또 이 메시지 핸들러의 집합을 윈도우 프로시저 라고 부르며, 이는 메시지 처리 코드를 담고 있는 사용자 정의 함수이다.
윈도우 클래스는 윈도우의 다양한 특성을 정의하는 구조체로, 원하는 값으로 초기화한 후, RegisterClass()
함수를 호출해 운영체제에 등록해야 한다.
메시지 큐에서 메시지를 꺼내고, 키보드 메시지라면 특별한 처리를 한 후, 해당 메시지를 DispatchMessage()
를 통해 윈도우 프로시저에 전달한다. 이 일련의 작업을 메시지 루프라고 한다.
GUI 응용 프로그램에서 사용자 입력을 받고 출력을 할 수 있는 효과적인 방법은 컨트롤을 이용하는 것이다. 이는 표준화된 형태와 특성을 제공하는 일종의 윈도우이다.
컨트롤은 자식 윈도우로 존재하기 때문에, 컨트롤의 부모 윈도우는 SendMessage()
함수를 사용해 컨트롤에 메시지를 보낼 수 있다.
GUI 소켓 응용 프로그램
윈도우 메시지를 받았을 때 시간이 오래 걸리는 작업을 하면, 메시지 루프가 정지하게 되고 이로 말미암아 다른 메시지를 처리할 수 없게 된다.
소켓 응용 프로그램은 메시지 루프를 정지시킬 수 있는 부분이 많이 존재하기에, 소켓 코드를 별도의 스레드로 분리해야 한다. 또한, 윈도우 프로시저와 소켓 코드가 공유하는 데이터는 스레드 동기화 기법을 사용해 보호해야 한다.
대화상자 기반 응용 프로그램
대화상자는 다양한 컨트롤을 포함하는 일종의 윈도우로서, dialog box 라고 부른다.
독립적인 응용 프로그램으로 존재할 수도 있는데, 이를 대화상자 기반 응용 프로그램이라 부른다.
이러한 프로그램을 작성하려면 코드와 더불어 대화상자 템플릿을 만들어야 하는데, 이는 대화상자 자체와 대화상자에 포함된 컨트롤에 대한 정보를 담고 있는 이진 데이터다.
대화상자 기반 소켓 응용 프로그램
대화상자 기반 응용 프로그램도 일반 GUI 응용 프로그램처럼 메시지 구동 방식으로 동작한다.
따라서 소켓 코드를 별도의 스레드로 분리해야 하며, 대화상자 프로시저와 소켓 코드가 공유하는 데이터는 동기화 함수를 사용해 보호해야 한다.
요약
- GUI 응용 프로그램 구조와 동작 원리
- 외부에서 메시지를 발생시키는 이벤트가 발생하면 운영체제가 관리하는 시스템 메시지 큐에 정보가 저장되고, 운영체제는 적절한 응용 프로그램의 메시지 큐에 이를 보낸다.
- 각 응용 프로그램은 자신의 메시지 큐를 감시하다가 메시지가 발생해서 큐에 들어오면 하나씩 꺼내 처리하고 메시지가 없을 때는 대기한다.
- 메시지를 받았을 때 동작을 결정하는 코드를 메시지 핸들러라 하며, 메시지 핸들러의 집합은 윈도우 프로시저라고 부른다.
- GUI 소켓 응용 프로그램 구조와 동작 원리
- 윈도우 메시지의 처리에 많은 시간이 소요된다면 다른 메시지를 처리할 수 없는 문제가 생긴다.
- 소켓 코드를 별도의 스레드로 분리하면서, 공유 데이터는 스레드 동기화 기법으로 보호한다.
'공부한 이야기 > 윈도우 소켓 프로그래밍' 카테고리의 다른 글
XI : 소켓 입출력 모델 II (0) | 2023.04.29 |
---|---|
X : 소켓 입출력 모델 I (0) | 2023.04.29 |
VIII : 소켓 옵션 (0) | 2023.04.29 |
VII : UDP 서버-클라이언트 (0) | 2023.04.29 |
VI : 멀티스레드 (0) | 2023.04.29 |