성댕쓰 똑똑한 생활

고정 헤더 영역

글 제목

메뉴 레이어

성댕쓰 똑똑한 생활

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (172)
    • 똑똑한 재테크 (1)
      • 올웨더 자산배분 (1)
    • 똑똑한 개발 (170)
      • Hazel 게임엔진개발 (0)
      • Algorithm 과 Data Structure (51)
      • C++ (18)
      • C# (8)
      • 개발로그 (0)
      • Image Processing (2)
      • C++ 게임개발 (60)
      • 컴퓨터 그래픽스 (10)
      • 수학 (13)
      • 영어 (8)

검색 레이어

성댕쓰 똑똑한 생활

검색 영역

컨텐츠 검색

똑똑한 개발/C++

  • DllMain 정리

    2022.08.24 by 성댕쓰

  • Strand 정리

    2022.08.23 by 성댕쓰

  • [boost] asio#2

    2022.05.02 by 성댕쓰

  • [boost] asio #1

    2022.05.01 by 성댕쓰

  • [Visual Studio] Character Set Unicode vs MBCS

    2022.04.26 by 성댕쓰

  • enable_shared_from_this

    2022.04.22 by 성댕쓰

  • lvalue, rvalue 알아보자

    2021.05.29 by 성댕쓰

  • condition_variable에 대해서

    2021.05.29 by 성댕쓰

  • 더블포인터에 대해서

    2021.05.29 by 성댕쓰

  • 정적라이브러리, 동적라이브러리 비교

    2021.05.29 by 성댕쓰

DllMain 정리

DllMain Dynamic link library로 링크할 경우, DllMain이 진입점 함수로 불린다. 기본 함수 모양은 다음과 같다. 함수 이름은 대소문자 구별하므로 주의하자. BOOL WINAPI DllMain( HINSTANCE hinstDLL, // handle to DLL module DWORD fdwReason, // reason for calling function LPVOID lpvReserved ) // reserved { // Perform actions based on the reason for calling. switch( fdwReason ) { case DLL_PROCESS_ATTACH: // Initialize once for each new process. // Retur..

똑똑한 개발/C++ 2022. 8. 24. 15:13

Strand 정리

Strands 란 event handler 순차 실행을 보장하는 api. 이를 활용하면, 멀티 쓰레드 환경에서 명시적 lock없이 코드를 만들 수 있다. strand는 application code와 handler 실행 사이에 layer를 제공한다. worker thread가 직접 handler를 호출하지 않고 strand queue에 쌓는다. Strand Implementation Strand가 보장해야 할 기능은 다음과 같다. 동시에 핸들러를 실행하지 않는다. 이를 만족하기 위해, worker 스레드가 strand를 실행하고 있는지 확인할 수 있어야 한다. strand는 queue를 가지고 handler를 queuing 한다. 핸들러는 worker 스레드에서만 실행된다.(boost 용어로 io_ser..

똑똑한 개발/C++ 2022. 8. 23. 14:54

[boost] asio#2

strand를 이용, completion handler를 multithreaded program에서 동기화하는 방법을 알아보자. completion handler는 io_context::run()을 실행한 스레드에서 실행된다. 하나의 스레드에서만 run()을 호출 했다면, 핸들러는 절대 동시에 실행되지 않는다. 싱글 스레드에서만 asio를 사용하여 앱을 만드는 것은 좋지만 다음과 같은 제약이 있다. - 핸들러 작업이 오래걸리면, 반응성이 느려짐. - 멀티 프로세스 활용 못함. 대안으로 io_context::run()을 콜하는 스레드 풀을 만드는 방법이 있다. 그러나, 핸들러에서 공유 자원에 접근하는 등 스레드 safe하지 않기 때문에 동기화 작업이 필요하다. io_context를 받아 멤버변수 stran..

똑똑한 개발/C++ 2022. 5. 2. 22:43

[boost] asio #1

튜토리얼 따라 하며 boost-asio library 사용법 알아보자. 튜토리얼 링크 : Timer.1 - Using a timer synchronously - 1.79.0 (boost.org) #include #include int main() { boost::asio::io_context io; boost::asio::steady_timer t(io, std::chrono::seconds(5)); t.wait(); std::cout

똑똑한 개발/C++ 2022. 5. 1. 09:55

[Visual Studio] Character Set Unicode vs MBCS

visual studio에 캐릭터 set을 정하는 옵션이 있다. 이 옵션은 문자열과 관련한 여러 개의 window api 정의를 바꾼다. int MessageBoxA(HWND hWnd, const char* lpText, const char* lpCaption, unsigned int uType); int MessageBoxW(HWND hWnd, const wchar_t* lpText, const wchar_t* lpCaption, unsigned int uType); MessageBoxA는 코드 페이지 인코딩을 적용하는 char parameter를 사용하고, MessageBoxW는 UTF-16 인코딩을 적용하는 wchar_t parameter를 사용한다. #ifdef UNICODE #define Mes..

똑똑한 개발/C++ 2022. 4. 26. 22:05

enable_shared_from_this

shared_ptr로 관리하고 있는 object ownership을 공유하는 또다른 shared_ptr pt1, pt2, ...을 만들 수 있는 기능을 제공한다. publicly enable_shared_from_this를 상속하면 shared_from_this 함수를 사용할 수 있다. T::shared_from_this 는 shared_ptr로 관리하고 있는 t와 ownership을 공유하는 new shared_ptr를 리턴한다. Notes 보통 this에 weak_ptr을 멤버변수를 추가하여 enable_shared_from_this 구현한다. Example #include #include struct Good : std::enable_shared_from_this // note: public inh..

똑똑한 개발/C++ 2022. 4. 22. 12:45

lvalue, rvalue 알아보자

Lvalue, Rvalue 는 무엇? Lvalue, Rvalue 는 expression 에서 정의된다. object 와 관계 없다. double d; // d 는 double object이고 l,r value 의미없다. d = 3.1415*2; // expression 에서 lvalue, rvalue 가 정의된다. Lvalue 는 표현식에서 object(메모리를 가지고 있음)임. Rvalue 는 표현식에서 Lvalue 를 제외한 표현식임. Lvalue, Rvalue 예들… Numeric, character literal 은 Rvalue. enum Value 들 Rvalue. enum Color {red, green, blue} // red, green, blue 는 Rvalue & 참조연산은 Lvalue..

똑똑한 개발/C++ 2021. 5. 29. 17:58

condition_variable에 대해서

condition_variable 언제 씀? 스레드간 통신 원할 때 ex) 특정조건을 만족할 때까지 스레드를 블록하고 싶을 때. 사용방법 condition_variable:: wait, notify_one, notify_all 메서드를 이용 다른 스레드가 일을 처리할 때까지 기다리게 할 수 있다. wait 을 사용하기 위해서는, 스레드가 먼저 mutex 를 점유해야 한다. notify_… 함수를 호출하면 wait 하고 있는 조건변수에 알린다. 그러면 해당 스레드가 깨어난다. condition_variable condition_value; bool flag = false; boost::mutex some_mutex; void worker() { { std::this_thread::sleep_for(std:..

똑똑한 개발/C++ 2021. 5. 29. 17:56

더블포인터에 대해서

더블포인터란 싱글 포인터를 가르키는 포인터 배열을 가리키는 포인터? 더블 포인터는 배열을 가르키는 포인터가 될 수 있음. 이차원 배열? 더블 포인터는 이차원 배열을 가르킬 수 없음. 더블 포인터의 두 가지 경우 A type 의 배열을 감싸는 배열 A type pointer 배열 포인터의 주소를 바꾸고 싶을 때 싱글 pointer 를 사용한 경우 void ChangePtrAddr(int* ptr) { ptr = new int[3]; } int* mainPtr = new int[5]; ChangePtrAddr(mainPtr); ptr 이 Stack 생성 되고 mainPtr 값 복사됨. ptr 에 새로운 주소 할당. 그러나, 함수 빠져나오면서 ptr 소멸. mainPtr 값은 바뀌지 않음. 더블 pointer..

똑똑한 개발/C++ 2021. 5. 29. 17:54

정적라이브러리, 동적라이브러리 비교

정적라이브러리 (lib) 정적라이브러리를 프로젝트에 포함시키면 링크 과정에서 프로젝트에 포함되어 실행파일이 만들어진다. 동적라이브러리 (dll) 동적라이브러리를 프로젝트에 포함시키면 링크 과정에서 포함되지 않는다. dll 사용 장점 메모리 절약 실행 이미지크기 작아짐 교체 및 디버깅 용이 컴파일 시간 줄어듦. ## 외부 라이브러리 포함 방법 lib 인 경우, 링크 디렉터리, 추가 종속성, 헤더파일 위치 설정 dll 인 경우, 링크 디렉터리, 추가 종속성, 헤더파일 위치 설정 후 실행파일과 같은 디렉토리에 dll 위치시킴.

똑똑한 개발/C++ 2021. 5. 29. 17:45

추가 정보

인기글

최신글

페이징

이전
1 2
다음
TISTORY
성댕쓰 똑똑한 생활 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바