SlideShare a Scribd company logo
1 of 61
Download to read offline
Boost 라이브리와 C++11
최흥배 ( jacking75@gmail.com )
Visual C++ MVP 2008 ~
VS 스터디팀 회원으로 활동 중. http://vsts2010.tistory.com/
현재 ‘미리 보는 C++11’ 연재 중
C++11

Boost 라이브러리와
C++11

유용한 Boost
라이브러리 소개
C++ 11
C++98


    C++03
2006년까지 새로운 표준에
들어갈 기능을 제안 받음


당초 계획은 2009년까지
표준을 확정하는 것.

그래서 C++0x라고 부르기로 함
2011년 8월 12일에 ISO에서 승인을 받음


       C++11
• C++0x TR1 라이브러리 추가

• VC++ 버전 9
•   auto
•   static_assert
•   rvalue Reference
•   lambda
•   decltype
•   nullptr
•   unique_ptr
•   make_shared
•   STL 추가
Elements of Modern C++ Style

• 컨테이너를 함수의 리턴값으로 전달받기
• auto
• Lambda 함수
• smart 포인터
• nullptr, Range for
http://www.lameproof.com/844613
Boost 라이브러리와
    C++11
C++ ?                                          C#, Java ?




http://www.flickr.com/photos/adrianamorett/5470167595/
믿을 수 있어 ?
array functional
shared_ptr weak_ptr
 regex    random
 unordered_map
  unordered_set
C++ Now!
#include <boost/array>
C++ 강력하지만 생산성이 없다……




C++ 강력함과 생산성이 뛰어난…
유용한
Boost 라이브러리
     소개
출처 : http://d.hatena.ne.jp/faith_and_brave/20100828/1282973201
Logging
Task
Lockfree
SIMD
……
하나의 컨테이너에

 int 타입의 데이터를

 float 타입의 데이터를

 string 타입의 데이터를

 유저 정의 타입(구조체, 클래스) 데이터를

 담고 싶어요!!!




Any
원형 버퍼가 필요한데 만들어야 하나..?




Circular Buffer
숫자를 문자로 바꾸어야 하는데....

     문자를 숫자로 바꾸어야 하는데....

     클래스나 구조체를 숫자나 문자로
     바꾸어야 하는데.....

     그리고 당근 안전하게!!!




lexical_cast
컨테이너에...

    플레이어 식별 번호를 Key 값으로 저장,

    플레이어 이름을 Key 값으로 저장...

    그런데 하나의 컨테이너만 사용했으면
    좋겠는데....




multi_index
http://www.boost.org/doc/libs/1_47_0/libs/multi_index/doc/tutorial/index.html
삽입         삭제     기능
ordered_unique       O(log N)   O(1)
                                       set, multiset:
ordered_non_unique                     지정한 키로 검색

hashed_unique                          unordered_set 등:
                      O(1)      O(1)   지정한 키로 해시 검색
hashed_non_unique

                                       list:
     sequenced        O(1)      O(1)   삽입한 순으로 연속적으로

                                       vector:
random_access         O(1)      O(n)
                                       랜덤 액세스
함수의 반환 값이 유효한지 검사하고
   싶은데...

   유효하지 않은 값을 정의하기는 귀찮고.....




optional
#include <boost/optional.hpp>

boost::optional<int> ConversionNumber( const int nInput )
{
  if( nInput < 100 ) {
     retunr nInput * 5;
  }
  return boost:none;
}

int main()
{
   boost::optional<int> nCoversionNum = ConversionNumber(101);
   if( false == j ) {
      // 유효하지 않은 값...
   }
}
게임은 그래픽 프로그래밍....

 화상 편집이 필요한데....




GIL
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_io.hpp>

// RGB의 G 성분만을 남긴다
rgb8_pixel_t g(rgb8_pixel_t p)
{
     return rgb8_pixel_t( 0, at_c<1>(p), 0 );
}

int main()
{
     // png 파일을 읽는다
     rgb8_image_t src;
     png_read_image("graph.png", src);

     // (100,100)-(300,300) 부분을 빼네서 g로 바꾼다
     rgb8_image_t dst( 200, 200 );
     transform_pixels( subimage_view(view(src),100,100,200,200), view(dst), &g );

     // png 파일을 만든다
     png_write_view("result.png", view(dst) );
}
                                   http://www.kmonos.net/alang/boost/classes/gil.html
DEMO
C++ 11
    디렉토리 생성/삭제...

    디렉토리에 있는 파일 검색...

    어떻게 하더라.....

    윈도우하고 리눅스의 API는 명령어가 서로
    다르던데..




filesystem
using namespace boost::filesystem;

remove_all(“my_dir”);       // 디렉토리 안의 모든 파일 삭제
create_directory(“my_dir”);     // 디렉토리 생성

ofstream file(“my_dir/a.txt”);                           // 파일 읽기
file << “testn";
file.close();

if (!exists(“my_dir/a.txt”)) { // 파일이 있는지 조사
   std::cout << “파일이 없습니다“ << std::endl;
}



 https://sites.google.com/site/boostjp/study_meeting/study1
C++ 11
  C++로 시간 계산을 간단하게...

  C++로 시스템의 Tick 타임이나 고행상도
  시간을 측정하고 싶은데.....




chrono
#include <boost/chrono.hpp>
#include <cmath>

int main()
{
  boost::chrono::system_clock::time_point start =
                           boost::chrono::system_clock::now();

    for ( long i = 0; i < 10000000; ++i ) {
      std::sqrt( 123.456L ); // burn some time
    }

    boost::chrono::duration<double> sec =
                 boost::chrono::system_clock::now() - start;

    std::cout << "took " << sec.count() << " secondsn";
    return 0;
}
C++ 11
  멀티 코어 시대...

  공짜 점심은 없어졌다고 하는데...

  쓰레드를 어떻게 사용하지 ?

  헐...윈도우와 리눅스의 쓰레드 프로그래밍
  방식이 완전 다르네....




thread
void hello()
{
   cout << "Hello Concurrent World" << endl;
}


int main()
{
  boost::thread t(hello);
  t.join();
}


 https://sites.google.com/site/boostjp/study_meeting/study1
C++ 11
  컨테이너의 범위를 더 쉽게 지정.....




range
template <class R, class T>
typename boost::range_iterator<R>::typefind(R& r, T x)
{
   return std::find(boost::begin(r), boost::end(r), x);
}

std::vector<int> v;
int ar[3];

std::vector<int>::iteratorit = find(v, 3); // 컨테이너
int*p = find(ar, 3);                       // 배열




https://sites.google.com/site/boostjp/study_meeting/study1
다양한 네트웍 기능을 사용하는
 프로그램을 만들어야 하는데 싶다...

 고성능 네트웍 프로그램을 만들어야
 하는데....

 멀티 플랫폼이며, 당연 해당 플랫폼의
 고성능 IO를 사용해야 하는데....




Asio
Boost.Asio란?
• Boost 라이브러리의 일부

• Asynchronous I/O (비동기 입출력)

• I/O와 같이 시간이 걸리는 처리를 OS의 비동기 기능과
  스레드를 사용하여 처리

• 보통 네트워크 라이브러리로 알려져 있다
  그러나 파일 입출력이나 시리얼 입출력에서도 사용

• 멀티 플랫폼 지원
믿을 수 있나?
• 신뢰성이 높음

• 한국의 몇몇 온라인 게임에서 이미 사용 중

• 한국의 모 대형 IT 회사의 내부 네트웍 라이브러리 표준이
  Boost.Asio로 정해져 있음
OS 플랫폼 별 구현
• Linux Kernel 2.4
  select를 사용하므로 FD_SIZE 크기를 넘지 못함

• Linux Kerner 2.6
  epoll을 사용

• FreeBSD, Mac OS X
  Kqueue를 사용

• Solaris
  /dev/poll을 사용

• Windows(Windows 2000 이후)
  Overlapped I/O와 I/O Completion을 사용
Boost.Asio에는 뭐가 있을까?
• boost::asio::io_service 가장 중요

• ip::tcp::socket (http에도 사용)

• ip::udp::socket

• ip::icmp::socket (ping 등에 사용)

• ssl::context (Open SSL이 필요)

• serial_port

• boost::deadline_timer
Asio의 비동기 모델 - 스레드 모델


     애플리케이션
                           callback 함수 오브젝트


                   run()
   Boost 소켓
      io_service
          I/O




       OS

                              참조 : http://d.hatena.ne.jp/Softgels/20090304/1236123151
Asio의 비동기 모델 - 멀티 스레드 모델

     Boss 스레드
             만들고, 종료까지 기다림


       Worker 스레드
     Worker 스레드                 callback 함수 오브젝트
   Worker 스레드
                        run()

   Boost 소켓
       io_service
          I/O




        OS
                                     참조 : http://d.hatena.ne.jp/Softgels/20090304/1236123151
참고
C++11 Features in Visual C++ 11
http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx

Elements of Modern C++ Style
http://herbsutter.com/elements-of-modern-c-style/
(번역) http://www.lameproof.com/844613

Visual Studio 2010 공식 팀 블로그 - C++0x
http://vsts2010.net/category/C++0x
Boost 라이브러리 공식 홈페이지
http://www.boost.org/

Boostpro
http://www.boostpro.com/download/

Boost e-Book : The Boost C++ Libraries
http://en.highscore.de/cpp/boost/

boostcon / 2011 Presentations
https://github.com/boostcon/2011_presentations

Boost Asio 간단한 예제
http://javawork.egloos.com/1813629

More Related Content

What's hot

Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장SeongHyun Ahn
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발흥배 최
 
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로Jaeseung Ha
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
100511 boost&tips 최성기
100511 boost&tips 최성기100511 boost&tips 최성기
100511 boost&tips 최성기sung ki choi
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Nexon Developers Conference 2017 Functional Programming for better code - Mod...Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Nexon Developers Conference 2017 Functional Programming for better code - Mod...Isaac Jeon
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crowJaeseung Ha
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)Kyoungchan Lee
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013Esun Kim
 
[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들MinGeun Park
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1Chris Ohk
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback흥배 최
 
Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기지수 윤
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러우경 성
 

What's hot (20)

Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
100511 boost&tips 최성기
100511 boost&tips 최성기100511 boost&tips 최성기
100511 boost&tips 최성기
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Nexon Developers Conference 2017 Functional Programming for better code - Mod...Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Nexon Developers Conference 2017 Functional Programming for better code - Mod...
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crow
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러
 

Similar to Boost 라이브리와 C++11

NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2Chris Ohk
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013명신 김
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수SeungHyun Lee
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features SummaryChris Ohk
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++KyeongWon Koo
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성HyeonSeok Choi
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션codercay
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfkwbak
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁Yi-kwon Hwang
 
Quick & Dirty Tips for x64 hooks
Quick & Dirty Tips for x64 hooksQuick & Dirty Tips for x64 hooks
Quick & Dirty Tips for x64 hooks용환 노
 

Similar to Boost 라이브리와 C++11 (20)

NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
Changes in c++0x
Changes in c++0xChanges in c++0x
Changes in c++0x
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
 
Quick & Dirty Tips for x64 hooks
Quick & Dirty Tips for x64 hooksQuick & Dirty Tips for x64 hooks
Quick & Dirty Tips for x64 hooks
 

More from OnGameServer

SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기OnGameServer
 
이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기OnGameServer
 
임영기님 - 코드 리뷰 시스템 도입하기
임영기님 - 코드 리뷰 시스템 도입하기임영기님 - 코드 리뷰 시스템 도입하기
임영기님 - 코드 리뷰 시스템 도입하기OnGameServer
 
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기OnGameServer
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기OnGameServer
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기OnGameServer
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game serverOnGameServer
 
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프OnGameServer
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서OnGameServer
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기OnGameServer
 
Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축OnGameServer
 
IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍OnGameServer
 
해외 취업 이야기
해외 취업 이야기해외 취업 이야기
해외 취업 이야기OnGameServer
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows TerminalOnGameServer
 

More from OnGameServer (15)

SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기SDC 3rd 안중원님 - InGame CashShop 개발 하기
SDC 3rd 안중원님 - InGame CashShop 개발 하기
 
이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기이욱진님 - 메모리 관리자로부터 배우기
이욱진님 - 메모리 관리자로부터 배우기
 
임영기님 - 코드 리뷰 시스템 도입하기
임영기님 - 코드 리뷰 시스템 도입하기임영기님 - 코드 리뷰 시스템 도입하기
임영기님 - 코드 리뷰 시스템 도입하기
 
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기SDC 3rd 최흥배님 - Boost.multi_index 사용하기
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
 
초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기초보자를 위한 분산 캐시 이야기
초보자를 위한 분산 캐시 이야기
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game server
 
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
MinWin에 대해서
MinWin에 대해서MinWin에 대해서
MinWin에 대해서
 
C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기C++ 프로젝트에 단위 테스트 도입하기
C++ 프로젝트에 단위 테스트 도입하기
 
Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축Microsoft SharePoint를 활용한 개발환경 구축
Microsoft SharePoint를 활용한 개발환경 구축
 
IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍IPv6 이론과 소켓 프로그래밍
IPv6 이론과 소켓 프로그래밍
 
해외 취업 이야기
해외 취업 이야기해외 취업 이야기
해외 취업 이야기
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
 

Boost 라이브리와 C++11

  • 1. Boost 라이브리와 C++11 최흥배 ( jacking75@gmail.com )
  • 2. Visual C++ MVP 2008 ~
  • 3. VS 스터디팀 회원으로 활동 중. http://vsts2010.tistory.com/ 현재 ‘미리 보는 C++11’ 연재 중
  • 4.
  • 5.
  • 8. C++98 C++03
  • 9.
  • 10. 2006년까지 새로운 표준에 들어갈 기능을 제안 받음 당초 계획은 2009년까지 표준을 확정하는 것. 그래서 C++0x라고 부르기로 함
  • 11. 2011년 8월 12일에 ISO에서 승인을 받음 C++11
  • 12.
  • 13. • C++0x TR1 라이브러리 추가 • VC++ 버전 9
  • 14. auto • static_assert • rvalue Reference • lambda • decltype • nullptr • unique_ptr • make_shared • STL 추가
  • 15.
  • 16. Elements of Modern C++ Style • 컨테이너를 함수의 리턴값으로 전달받기 • auto • Lambda 함수 • smart 포인터 • nullptr, Range for http://www.lameproof.com/844613
  • 18. C++ ? C#, Java ? http://www.flickr.com/photos/adrianamorett/5470167595/
  • 19.
  • 21.
  • 22. array functional shared_ptr weak_ptr regex random unordered_map unordered_set
  • 25.
  • 26.
  • 27. C++ 강력하지만 생산성이 없다…… C++ 강력함과 생산성이 뛰어난…
  • 28.
  • 32. 하나의 컨테이너에 int 타입의 데이터를 float 타입의 데이터를 string 타입의 데이터를 유저 정의 타입(구조체, 클래스) 데이터를 담고 싶어요!!! Any
  • 33. 원형 버퍼가 필요한데 만들어야 하나..? Circular Buffer
  • 34.
  • 35. 숫자를 문자로 바꾸어야 하는데.... 문자를 숫자로 바꾸어야 하는데.... 클래스나 구조체를 숫자나 문자로 바꾸어야 하는데..... 그리고 당근 안전하게!!! lexical_cast
  • 36. 컨테이너에... 플레이어 식별 번호를 Key 값으로 저장, 플레이어 이름을 Key 값으로 저장... 그런데 하나의 컨테이너만 사용했으면 좋겠는데.... multi_index
  • 38. 삽입 삭제 기능 ordered_unique O(log N) O(1) set, multiset: ordered_non_unique 지정한 키로 검색 hashed_unique unordered_set 등: O(1) O(1) 지정한 키로 해시 검색 hashed_non_unique list: sequenced O(1) O(1) 삽입한 순으로 연속적으로 vector: random_access O(1) O(n) 랜덤 액세스
  • 39. 함수의 반환 값이 유효한지 검사하고 싶은데... 유효하지 않은 값을 정의하기는 귀찮고..... optional
  • 40. #include <boost/optional.hpp> boost::optional<int> ConversionNumber( const int nInput ) { if( nInput < 100 ) { retunr nInput * 5; } return boost:none; } int main() { boost::optional<int> nCoversionNum = ConversionNumber(101); if( false == j ) { // 유효하지 않은 값... } }
  • 41. 게임은 그래픽 프로그래밍.... 화상 편집이 필요한데.... GIL
  • 42. #include <boost/gil/gil_all.hpp> #include <boost/gil/extension/io/png_io.hpp> // RGB의 G 성분만을 남긴다 rgb8_pixel_t g(rgb8_pixel_t p) { return rgb8_pixel_t( 0, at_c<1>(p), 0 ); } int main() { // png 파일을 읽는다 rgb8_image_t src; png_read_image("graph.png", src); // (100,100)-(300,300) 부분을 빼네서 g로 바꾼다 rgb8_image_t dst( 200, 200 ); transform_pixels( subimage_view(view(src),100,100,200,200), view(dst), &g ); // png 파일을 만든다 png_write_view("result.png", view(dst) ); } http://www.kmonos.net/alang/boost/classes/gil.html
  • 43. DEMO
  • 44. C++ 11 디렉토리 생성/삭제... 디렉토리에 있는 파일 검색... 어떻게 하더라..... 윈도우하고 리눅스의 API는 명령어가 서로 다르던데.. filesystem
  • 45. using namespace boost::filesystem; remove_all(“my_dir”); // 디렉토리 안의 모든 파일 삭제 create_directory(“my_dir”); // 디렉토리 생성 ofstream file(“my_dir/a.txt”); // 파일 읽기 file << “testn"; file.close(); if (!exists(“my_dir/a.txt”)) { // 파일이 있는지 조사 std::cout << “파일이 없습니다“ << std::endl; } https://sites.google.com/site/boostjp/study_meeting/study1
  • 46. C++ 11 C++로 시간 계산을 간단하게... C++로 시스템의 Tick 타임이나 고행상도 시간을 측정하고 싶은데..... chrono
  • 47. #include <boost/chrono.hpp> #include <cmath> int main() { boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now(); for ( long i = 0; i < 10000000; ++i ) { std::sqrt( 123.456L ); // burn some time } boost::chrono::duration<double> sec = boost::chrono::system_clock::now() - start; std::cout << "took " << sec.count() << " secondsn"; return 0; }
  • 48. C++ 11 멀티 코어 시대... 공짜 점심은 없어졌다고 하는데... 쓰레드를 어떻게 사용하지 ? 헐...윈도우와 리눅스의 쓰레드 프로그래밍 방식이 완전 다르네.... thread
  • 49. void hello() { cout << "Hello Concurrent World" << endl; } int main() { boost::thread t(hello); t.join(); } https://sites.google.com/site/boostjp/study_meeting/study1
  • 50. C++ 11 컨테이너의 범위를 더 쉽게 지정..... range
  • 51. template <class R, class T> typename boost::range_iterator<R>::typefind(R& r, T x) { return std::find(boost::begin(r), boost::end(r), x); } std::vector<int> v; int ar[3]; std::vector<int>::iteratorit = find(v, 3); // 컨테이너 int*p = find(ar, 3); // 배열 https://sites.google.com/site/boostjp/study_meeting/study1
  • 52. 다양한 네트웍 기능을 사용하는 프로그램을 만들어야 하는데 싶다... 고성능 네트웍 프로그램을 만들어야 하는데.... 멀티 플랫폼이며, 당연 해당 플랫폼의 고성능 IO를 사용해야 하는데.... Asio
  • 53. Boost.Asio란? • Boost 라이브러리의 일부 • Asynchronous I/O (비동기 입출력) • I/O와 같이 시간이 걸리는 처리를 OS의 비동기 기능과 스레드를 사용하여 처리 • 보통 네트워크 라이브러리로 알려져 있다 그러나 파일 입출력이나 시리얼 입출력에서도 사용 • 멀티 플랫폼 지원
  • 54. 믿을 수 있나? • 신뢰성이 높음 • 한국의 몇몇 온라인 게임에서 이미 사용 중 • 한국의 모 대형 IT 회사의 내부 네트웍 라이브러리 표준이 Boost.Asio로 정해져 있음
  • 55. OS 플랫폼 별 구현 • Linux Kernel 2.4 select를 사용하므로 FD_SIZE 크기를 넘지 못함 • Linux Kerner 2.6 epoll을 사용 • FreeBSD, Mac OS X Kqueue를 사용 • Solaris /dev/poll을 사용 • Windows(Windows 2000 이후) Overlapped I/O와 I/O Completion을 사용
  • 56. Boost.Asio에는 뭐가 있을까? • boost::asio::io_service 가장 중요 • ip::tcp::socket (http에도 사용) • ip::udp::socket • ip::icmp::socket (ping 등에 사용) • ssl::context (Open SSL이 필요) • serial_port • boost::deadline_timer
  • 57. Asio의 비동기 모델 - 스레드 모델 애플리케이션 callback 함수 오브젝트 run() Boost 소켓 io_service I/O OS 참조 : http://d.hatena.ne.jp/Softgels/20090304/1236123151
  • 58. Asio의 비동기 모델 - 멀티 스레드 모델 Boss 스레드 만들고, 종료까지 기다림 Worker 스레드 Worker 스레드 callback 함수 오브젝트 Worker 스레드 run() Boost 소켓 io_service I/O OS 참조 : http://d.hatena.ne.jp/Softgels/20090304/1236123151
  • 59.
  • 60. 참고 C++11 Features in Visual C++ 11 http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx Elements of Modern C++ Style http://herbsutter.com/elements-of-modern-c-style/ (번역) http://www.lameproof.com/844613 Visual Studio 2010 공식 팀 블로그 - C++0x http://vsts2010.net/category/C++0x
  • 61. Boost 라이브러리 공식 홈페이지 http://www.boost.org/ Boostpro http://www.boostpro.com/download/ Boost e-Book : The Boost C++ Libraries http://en.highscore.de/cpp/boost/ boostcon / 2011 Presentations https://github.com/boostcon/2011_presentations Boost Asio 간단한 예제 http://javawork.egloos.com/1813629