분류 전체보기
-
OnTimer 함수Windows 프로그래밍 2019. 1. 3. 11:16
목요일마다 주간보고서를 써야 하는데 까먹는 날이 종종 있었다. 그래서 매주 목요일마다 주간보고서 파일을 자동으로 생성해주는 서비스를 만들게 되었다. 이때 사용한 함수가 OnTimer 함수이다. 주기적으로 시간 체크를 해야 했기에 특정 시간마다 현재 시간을 체크해주는 함수가 필요했다.OnTimer는 그런 역할을 해주는 함수이다. 이제 사용법을 알아보자. Dialog 속성에서 메시지 탭을 보면 아래처럼 WM_TIMER가 있다. 여기서 OnTimer를 눌러 메시지를 추가한다.Message Map에 ON_WM_TIMER가 추가된 것을 볼 수 있다. BEGIN_MESSAGE_MAP(CMutexProjectDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_TIMER(..
-
Mutex와 Semaphore의 차이점과 사용방법Windows 프로그래밍 2019. 1. 3. 10:37
Mutex와 Semaphore 둘 다 동기화 커널 객체라는 공통점이 있다.동기화 커널 객체는 멀티 쓰레드 환경에서 공통된 자원에 다수의 쓰레드가 동시에 접근하게 되어 발생하는 문제를 예방하기 위해 사용하는 것이다. 약간 요론 느낌? 그래서! Mutex와 Semaphore의 차이점이 뭐냐, Mutex는 한 번에 하나의 쓰레드 만이 자원에 접근할 수 있고, Semaphore는 한 번에 접근할 수 있는 쓰레드의 갯수를 생성 시에 지정할 수 있다. 따라서 여러 쓰레드가 한 번에 자원에 접근하도록 하고 싶다면 Semaphore를 사용하고 그렇지 않은 경우에는 Mutex를 사용하면 될 것 같다. 그럼 이제 사용법을 알아보자. Mutex 먼저 뮤텍스의 생성 및 사용법을 보자.뮤텍스는 CreateMutex() 라는 함..
-
화면 캡쳐와 Printwindow 함수Windows 프로그래밍 2019. 1. 2. 17:16
현재 띄워져 있는 모든 창의 화면을 캡쳐해오고 싶었다. 많은 함수로 시도해 봤지만 내가 잘못한 건진 모르겠는데 잘 되지 않았다. 그 때 Printwindow라는 함수를 찾게 되었다.Printwindow는 캡쳐를 원하는 창의 핸들과 DC, 그리고 옵션 이렇게 3가지의 인수를 넘기면 해당 창을 캡쳐한 비트맵의 핸들을 반환한다. MSDN : https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-printwindow 프로세스의 핸들 값만 넘기면 캡쳐본의 비트맵 핸들을 반환해 주는 함수를 만들어 보았다. HBITMAP Capture(HWND hTargetWnd) { HDC hDC = ::GetDC(hTargetWnd); HDC hdcBit..
-
뮤텍스란?Windows 프로그래밍 2019. 1. 2. 15:55
개발을 하다 보면 쓰레드를 여러 개 이용하게 될 때가 있다. 그런데 만약 다수의 쓰레드가 하나의 변수 또는 자원에 동시에 접근한다면? 우리가 원하는 결과값이 나오지 않을 수도 있다. 뮤텍스(Mutex) 는 이러한 상황을 만들지 않기 위해 사용하는 커널 객체 중 하나이다. 이와 같은 동기화 커널 객체에는 '세마포어' 라는 것도 존재한다. 뮤텍스를 사용하면 한 번에 하나의 쓰레드만 특정 자원에 접근해 연산하게 된다. 예를 들어 1번 쓰레드가 특정 변수에 접근해 연산을 수행중이라면 2번 쓰레드는 1번 쓰레드의 연산이 끝날때까지 해당 변수에 접근할 수 없다. 실제 뮤텍스 사용 전후의 차이를 보고 싶어서 MFC를 이용해 한쪽은 뮤텍스를 사용하고 한쪽은 사용하지 않은 프로그램을 만들어 보았다. (실행파일은 첨부해 ..