반응형

프로그래밍 34

IOCP를 이용한 OVERLAPPED 사용시 ErrorCode(6) 관련

IOCP OVERLAPPED사용할 경우 랜덤적으로 WSARecv 또는 WSASend 동작시 Error Code 6 일 발생하는 경우가 있다. 이것은 Overlapped 구조체의 hEvent 변수를 초기화하지 않고 사용해서 발생하는 것으로 해당 변수를 NULL 로 초기화해서 사용할 경우 발생하지 않는다. 아래의 경우에는 내가 사용했던 경우이다. 나중에 혹시 다시 발생하면 참고할 수 있도록 하자. class CROverlapped : public OVERLAPPED, public CRObject { public: E_TYPE_OVERLLAPED eType; std::shared_ptr m_ClntInfo; CROverlapped() { m_ClntInfo = nullptr; hEve..

MFC 에서 마우스 클릭을 비활성화 하는 방법

MFC에서 마우스 클릭 비활성화하는 방법 void CExmaplDlg::OnDisableMouseButton() { CRect rect; GetWindowRect(rect); ClipCursor(&rect); ShowCursor(FALSE); ::SetCapture(m_hWnd); } void CExampleDlg::OnEnableMouse() { ShowCursor(TRUE); ClipCursor(NULL); ::ReleaseCapture(); } 보통 마우스를 비활성화시켰을 경우 Ctrl + Alt + Del 키를 이용하여 다시 동작 가능하도록 한다. 특정 동작이나 수행하는 동안 마우스 입력을 제한해야 할 경우 사용하면 될 듯 싶다.

[C++] 스마트포인터 weak_ptr [정보공유의 장]

C++ 스마트 포인터 weak_ptr 금일 정리해볼 내용은 스마트 포인터 중 weak_ptr 관련된 내용이다. shared_ptr 은 자신이 참조하고 있는 메모리에 대해 참조 카운터를 증감시킴으로써 객체의 수명을 관리하도록 되어 있었다. 하지만 weak_ptr 은 shared_ptr 의 참조 카운팅에 포함되지 않는다. shared_ptr 의 소유 포인터를 참조만할 뿐 참조 카운터에는 영향을 주지 않는 것이다. 내부적으로 shared_ptr 을 더 보게 되면 참조 카운터를 관리하는 변수가 두 개로 나뉘어져 있으며 strong reference count 와 weak reference count 이다. shared_ptr 끼리의 참조는 strong reference count 가 증가되며 weak_ptr 에..

[C++] 스마트포인터 unique_ptr [정보공유의 장]

C++ 스마트 포인터(Smart pointer) unique_ptr 이번 포스팅 정리는 스마트 포인터 중 unique_ptr 에 대해서 정리해 보자. unique_ptr 은 소유하는 포인터에 대해 다음과 같은 규칙을 갖는다. 1. 소유 포인터는 한 개의 객체만이 소유할 수 있다. 2. 원래 포인터의 소유권을 이동시키는 것은 가능하지만 복사나 대입은 불가능하다. 3. unique_ptr 객체가 소멸될 때 소유 포인터의 메모리도 해제된다. 우선 unique_ptr 을 생성하는 문법적인 요소를 알아보도록 하자. #include #include using namespace std; int main() { unique_ptr p1(new int(2)); unique_ptr p2 = make_unique(2); r..

[C++] 스마트포인터 shared_ptr - 정보공유의 장

이번 포스팅은 스마트 포인터 중 shared_ptr 에 대해서 정리해보겠다. shared_ptr in C++ 11 shared_ptr 은 c++ 11 이후 제공되는 스마트 포인터 중 하나로 포인터를 더 이상 사용하지 않을 경우 메모리를 자동으로 해제해준다. 보통 unmaged 코드에서는 메모리를 개발자가 직접적으로 관리하는 경우가 많은데 이럴 경우 할당된 메모리를 해제하지 않는 실수를 많이 범할 수 있다. 이런 경우를 미연에 조금 더 방지할 수 있게 해준다. 다음 코드는 shared_ptr 을 사용하는 예제를 보여주고 있다. #include #include using namespace std; int main() { shared_ptr x(new int(1)); shared_ptr y = make_sha..

C++ template with member function

이번 포스팅은 클래스의 멤버 함수(member function)를 템플릿(template)과 사용할 때 그 문법과 작성법에 대해서 알아보자. 일단 일반적인 형태는 아래 예시와 같다. #include using namespace std; template class Vec { public: void push(T a); template T func(K a); }; template void Vec::push(T a) { } template template T Vec::func(K a) { } int main() { return 0; } 위와 같이 멤버 함수에 템플릿을 사용함으로써 얻는 이득은 무엇일까 ? 다음 코드를 보자. #include template class Test { public: Test(T a) ..

C++ template 과 type 추론

C++ template 과 type 추론 이번 포스팅 정리는 template 과 type 추론 관련해서 정리해 본다. 보통 우리는 최소값 구하는 함수를 아래와 같이 구현할지 모른다. #include template T GetMin(T a, T b) { return a < b ? a : b; } int main() { int x = 1; int y = 2; GetMin(x, y); GetMin(&x, &y); return 0; } 위 코드에서 두번째 호출되는 GetMin 은 애매모호 하다. 어떤 것이 옳다고 볼 수 없기 때문이다. 값을 비교하려는 것인지 주소값을 비교하려는 것인지. 본래 의도라면 해당 변수에 있는 값을 비교해야 했으리라. 그럼 어떻게 접근해야 할까? T 의 타입이 어떤 타입인지 판단한 후 ..

C++ Perfect forwarding (std::forward 의 역할)

이전 정리글은 2022.01.07 - [프로그래밍/C/C++] - C++ Universal reference & Reference Collapsing Rules C++ Universal reference & Reference Collapsing Rules 이전 정리글은 2022.01.07 - [프로그래밍/C/C++] - C++ rvalue reference 우측값 참조 속성 C++ rvalue reference 우측값 참조 속성 이전 정리글 2022.01.06 - [프로그래밍/C/C++] - C++ rvalue reference (우측값.. nanze.tistory.com Perfect forwarding 이번 정리는 Perfect forwarding 에 대한 정리를 해보자. 직역하면 완벽한 전달 ? 쯤..

반응형