반응형

마구노트 51

병렬 프로그래밍 Parallel Programming - task cancel

이전 정리글은 2022.01.05 - [프로그래밍/Parallel Programming] - 병렬 프로그래밍 Parallel Programming - cancellation_token 특성 병렬 프로그래밍 Parallel Programming - cancellation_token 특성 이전 정리글 2022.01.03 - [프로그래밍/Parallel Programming] - 병렬 프로그래밍 Parallel Programming - cancellation_token 병렬 프로그래밍 Parallel Programming - cancellation_token 이전 정리글은 2022.01.. nanze.tistory.com 이번 정리에는 cancellation_token 아 아닌 task 클래스 또는 task_..

병렬 프로그래밍 Parallel Programming - cancellation_token 특성

이전 정리글 2022.01.03 - [프로그래밍/Parallel Programming] - 병렬 프로그래밍 Parallel Programming - cancellation_token 병렬 프로그래밍 Parallel Programming - cancellation_token 이전 정리글은 2022.01.03 - [프로그래밍/Parallel Programming] - 병렬 프로그래밍 Parallel Programming - concurrent_unordered_map 지난 포스팅에 이어 ppl 에서 제공하는 task 들을 취소할 수 있는 방법을 알.. nanze.tistory.com 오늘은 이전 정리에서 알아본 cacellation_token 의 특성을 알아보자. concurrency::cancellatio..

C++ lambda expression 람다 표현식

C++ 11 부터 지원하기 시작한 람다 표현식에 대해서 정리해보자. 람다 표현식의 구성은 다음과 같다. 캡쳐블록 + 파라미터 목록 + mutable (생략) + throw (생략) + 리턴타입 (생략) + 함수바디 [캡쳐블록](파라미터 목록) mutable throw ->리턴타입 {함수바디} 캡쳐블록 캡쳐블록은 [ ] 로 감싸지며 람다 표현식 안에서 참조하는 외부 변수를 지정한다. 변수 지정시 표현식에 따라 의미가 다른데 알아보자. [=] : 외부 모든 변수 값을 복사하며 객체의 멤버함수에서 람다 호출 시 this 포인터도 전달된다. 또한 변수 값으로 복사 시에는 const 로 이루어지기 때문에 기본적으로 수정이 되지 않는다. 값으로 복사 된 변수의 값 수정이 필요할 경우 에는 mutable 키워드를 이..

병렬 프로그래밍 Parallel Programming - cancellation_token

이전 정리글은 2022.01.03 - [프로그래밍/Parallel Programming] - 병렬 프로그래밍 Parallel Programming - concurrent_unordered_map 병렬 프로그래밍 Parallel Programming - concurrent_unordered_map 이전 정리글은 2021.12.30 - [프로그래밍/Parallel Programming] - 병렬 프로그래밍 Parallel Programming - concurrent_vector 자 오늘은 일곱번째 정리시간이다. 호랑이해 들어 첫 포스팅이다. 이번 해에는 호랑.. nanze.tistory.com 지난 포스팅에 이어 ppl 에서 제공하는 task 들을 취소할 수 있는 방법을 알아보자. 개발 공부를 처음 접하거나..

병렬 프로그래밍 Parallel Programming - concurrent_unordered_map

이전 정리글은 2021.12.30 - [프로그래밍/Parallel Programming] - 병렬 프로그래밍 Parallel Programming - concurrent_vector 자 오늘은 일곱번째 정리시간이다. 호랑이해 들어 첫 포스팅이다. 이번 해에는 호랑이 기운 받아 모든 일이 힘차게 잘 나아가서 순조롭게 풀렸으면 한다. 방문하신 모든 분들도.~! 첫번째로 알아볼 것은 이전시간에 다른 자료구조이다. 병렬 멀티셋을 알아보자. concurrency::concurrent_unordered_multiset 해당 자료구조는 중복 값을 가질 수 있는 set 이라고 생각하면 된다. 코드를 보자. #include #include #include using namespace std; int main() { co..

병렬 프로그래밍 Parallel Programming - concurrent_vector

이전 정리글은 2021.12.28 - [프로그래밍/Parallel Programming] - 병렬 프로그래밍 Parallel Programming - parallel_sort 오늘은 7번째 정리시간이다. 오늘은 무엇에 대해서 정리해볼까.? 오늘은 PPL 에서 제공하는 컨테이너에 대해서 정리해보자. 먼저 알아볼 것은 vector 에 대해서 알아보자. concurrency::concurrent_vector 우리가 알고 있는 STL vector 와 동일한 것이다. 하지만 차이가 있다. 병행 프로그래밍에서 사용할 수 있는 컨테이너이기에 제공하는 몇개의 함수에 대해서 thread-safe 를 보장한다. 그럼 어떤 함수들이 thread-safe 한지 알아보자. 함수 thread-safe 함수 thread-safe ..

c++ 템플릿 가변인자 Variadic template

항상 자주 마주치지만 익숙하지 않은 템플릿에 대해서 정리해보자. 템플릿에서 인자로 받을 수 있는 것은 무엇이 있을까? 일단 변수는 되지 못한다. 그리고 실수 값도 사용이 불가하다. 그렇다 템플릿 인자로 가능한 것은 정수형 상수이거나 타입일 경우에만 가능하다. 다음의 코드를 보자. template class CTemplateTest { T tName[SIZE]; }; int main() { CTemplateTest test1; CTemplateTest test2; // 정수값만 가능. CTemplateTest test3; //템플릿 인자를 명시해야 함 int value = 10; CTemplateTest test4; //변수 불가능. CTemplateTest test5; return 0; } 위 코드는 템..

Visual studio 디버그 빌드 배포시 종속 DLL 위치

테스트나 다른 어떤 이유에서 디버그 빌드를 배포하여 사용할 경우가 있다. 가장 빈번한 이유는 다른 곳에서 디버깅 필요가 있을 경우가 제일 많을 것이다. 릴리즈는 MS에서 VS 마다의 재배포 패키지를 인터넷을 통해 배포 중이기에 쉽게 설치가 가능하나 디버그 같은 경우에는 따로 제공되지 않고 있다. 이전에는 윈도우의 DLL 디렉토리에 위치해있는 것을 하나 하나 찾았는데 그럴필요 없이 VS 설치폴더에 가면 잘 정리되어 있다. 다음은 예를들어 VS2013 일 때의 경로이다. 위 이미지의 경로를 보면 Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\Debug_NonRedist 위치에 플랫폼 별로 DLL이 위치해 있다. 해당 폴더 내 DLL 을 가져다 실행파..

Perspective Projection

Perspective Projection 이란 무엇인가? Perspective Projection 이미지가 투영되는 면을 변화시키고자 할 때 사용하는 알고리즘이다. 내가 이 알고리즘을 접하게 된 것은 과거 프로젝트를 진행하면서 로봇 장치와 카메라를 가지고 사각 화면을 터치해야 하는 부분이 있었다. 알겠지만 카메라를 통해 보는 터치화면은 실체 터치화면 처럼 사각형으로 보이지 않을 경우가 있다. 그래서 클릭해야 할 좌표에 대한 보정이 필요한데 이 때 사용한 것이 이 알고리즘을 기반으로 한 것이다. 기본적으로 Perspective Transform 을 위한 수식은 다음과 같다. 저 행렬에서 1을 넣는 것은 표현식을 쉽고 구하기 편하게 하기 위함이다. 위 행렬의 의미는 일단 본 직선 방정식에 어떠한 변화를 주어..

MFC 현재 윈도우 폰트 속성

현재 윈도우의 폰트 속성을 알고 싶을 경우가 있다. 폰트 속성을 알아아내기 위해서는 다음 코드를 보자. BOOL TestDlg::OnInitDialog() { LOGFONT lf; CDialogEx::OnInitDialog(); //생략 m_bigfont.CreatePointFont(200, "굴림"); GetDlgItem(IDC_EDIT)->SetFont(&m_bigfont); GetFont()->GetLogFont(&lf); lf.lfItalic = TRUE; // 주어진 로그 폰트 속성을 이용하여 폰트를 생성한다. m_stylefont.CreateFontIndirect(&lf); GetDlgItem(IDC_EDIT)->SetFont(&m_stylefont); //생략 return TRUE; } 위 ..

반응형