본문 바로가기

Boost30

boost::asio 비동기 서버/클라 step 1 boost asio 를 이용해서 비동기 서버 / 클라 만들어보기 정리해 봅시다~ Client -> Recv -> Recv Queue -> Worker Thread -> Send Queue -> Send Callback -> Client 분홍색 까지의 부분을 소스 예제로 봅시다! 어디까지나 예제 차원으로 (원래 asio 예제도 그렇고) class 내부에 막 때려넣었으니 따라하거나 이상한 코딩하는 사람으로 오해하지마세요 ^^; 소스 퍼가실 때 소스코드 부분을 더블 클릭해서 전체 선택 후 카피가 좋습니다 드래그 하면 한줄로 복사되요 컴파일 관련은 이전 글을 참고해 주세요 서버 예제 #include "stdafx.h" #include #include #include #include #include #includ.. 2011. 11. 9.
boost::thread / boost::thread_group 무슨 말이 필요하랴.. 예제로 보자.. 참고로 join 은 thread 시작을 의미하는게 아니고 thread 가 정지할 때까지 기다렸다가 후 처리를 한다는 말이다.. 초기화 할 때 이미 thread 는 시작된다 #include void GlobalFunction() { while(true) { } } int _tmain() { // default { boost::thread t(boost::bind(&GlobalFunction)); t.join(); } // group { boost::thread_group tg; tg.create_thread(boost::bind(&GlobalFunction)); tg.add_thread(new boost::thread(boost::bind(&GlobalFunction.. 2011. 11. 8.
BYTE (unsigned char) Stream 에 boost::pool 적용 이미 공개했던 BYTE Stream 이 워낙에 new delete 를 자주 호출 하는 관계로 메모리 단편화의 문제가 생길 수 있을 것 같아 (속도 차는 측정해본 결과 몇 개의 변수 추가로는 0.0015 ~ 6 정도로 차이는 없었음) 이 참에 겸사겸사 boost::pool 을 적용 보았습니다. 전 버전과 틀려진 점은 pool 에서 자동 소멸 기능이 지원되기 때문에 최종적 BYTE* 를 받을 때 스마트 포인터로 안받고 직접적으로 호출을 했다는 점 입니다. 가독성은 떨어지게 됐는데 전 버전과 비교해보면 알 수 있을 겁니다 참고 사이트 : http://www.boost.org/doc/libs/1_47_0/libs/pool/doc/interfaces.html 참고 예제 소스 - 클레스 #define _BUFF_S.. 2011. 11. 4.
boost::function 으로 callback map 만들기 boost::function 을 이용해서 패킷 인덱스에 반응하여 callback 을 일으키는 방식 좀 더 알면 수작업을 더 줄 일 수 있을 것 같은데 지금은 뭐... 그냥 맛보기 수준인 듯 callback 매니저 #include #include // http://www.boost.org/doc/libs/1_47_0/doc/html/function/tutorial.html#id1361654 /* struct X { int foo(int); }; boost::function f; X x; f = std::bind1st( std::mem_fun(&X::foo), &x); f(5); // Call x.foo(5) */ typedef boost::functionTYPE_FUNCTION; typedef std::m.. 2011. 11. 3.
boost::asio::buffer http://think-async.com/Asio/boost_asio_1_3_1/doc/html/boost_asio/reference/buffer.html boost::asio::buffer 의 사용법이 잘 나와있는 레퍼런스 페이지 asio service 에서 쓰이는 read write 시 데이터 전송의 좋은 활용 예를 볼 수 있다 Buffers and Scatter-Gather I/O 의 예 char d1[128]; std::vector d2(128); boost::array d3; boost::array bufs1 = { boost::asio::buffer(d1), boost::asio::buffer(d2), boost::asio::buffer(d3) }; bytes_transferred = sock.. 2011. 10. 28.
boost::asio 비동기 TCP + echo 서버 / 클라이언트 asio 라이브러리를 이용해 비동기 TCP 서버와 클라이언트를 만들어 봤습니다 예제에 있는거 그대로 이용을 했으니 뭐 특별할건 없고 컴파일 옵션에서 /Mtd 와 클라 소스에서 MY_IP 부분 수정이 필요합니다 # 소스 퍼가실 때 소스 부분을 더블클릭하면 선택 됩니다 드래그 하면 라인 정리가 안되니까 더블클릭으로 선택하고 카피하세요 # 소스에 대한 더 좋은 의견이나 개선사항은 비밀덧글로 주세요 ^^ # 소스 퍼가실 때 한마디 남겨주시면 힘이 됩니다 @_@ 서버 소스 #include "stdafx.h" #include #include #include #include #include #include #include #include #include #include #include #include #include.. 2011. 10. 27.
boost::asio 쓰레드, 타이머, Strand 의 사용법 예제 asio io 를 쓰레드에 태워서 서버용 프로그램을 드래그 하더라도 멈추지 않게끔 된다 쓰레드에서 도는 두개의 타이머와 공유되는 변수를 통해 threadsafe 함을 보이고 strand 로 callback 을 관리하는 것을 볼 수 있다 예제 코드 #include "stdafx.h" #include #include #include class job { private: boost::asio::strand strand_; boost::asio::deadline_timer timer1_; boost::asio::deadline_timer timer2_; int co.. 2011. 10. 27.
boost::asio boost 라이브러리의 한 사이드로 TCP, UDP 의 io 지원을 해준다. 한번쯤 보면 좋을 듯. 웹에서 찾다보면 흔히 볼 수 있는 asio 의 메뉴얼을 번역해놓은 문서다 메뉴얼에는 asio 를 쓰다보면 필히 접게하 되는 자주 쓰이는 스킬과 본격적인 소켓 사용의 방법이 나온다 - 동기/비동기적 타이머 사용 - 인자를 핸들러에 바인딩 - 맴버함수를 핸들러에 바인딩 - 멀티스레드 환경에서 핸들러 동기화 - 동기/비동기적인 TCP/UDP 서버의 예제 - 위 서버에 상응하는 클라이언트 예제 진자 필요한거만 잘도 추려놨다. 이게 뭐야? 하고 한번씩 실행시켜보고 지나갔다 나중에 본격적으로 쓸때 아.. 그게 있어야 되는구나.. 돌이켜보게 된다. 2011. 10. 27.
boost 라이브러리 이미 오래전부터 아는 사람들 사이에서는 좋다고 소문난 라이브러리. vs2008 부터는 아예 표준으로 합류했다 tr1 라이브러리로 boost 라이브러리 설치형으로 다운로드 http://www.boostpro.com/download/ 설치 설명 참고하면 괜찮은 블로그 http://blog.daum.net/aswip/8429308 2011. 10. 27.
boost::lockfree 설치 및 사용법 Lock Free 가 적용된 FIFO, Stack, Ringbuffer(Queue) 를 지원해준다 부스터 설치 폴더에 boost 의 내용 (폴더와 hpp 파일들인데 폴더는 그냥 덮어쓰면 되고 hpp 는 최신 버전인지 비교를 해보고 덮어써야 안전) 과 Libs 를 카피해넣기만 하면 된다. 자세한 사용법이나 내용은 제작자 Tim 씨의 사이트에서 확인! boost::lockfree 다운로드는 아래에~ 자.. 사용법을 보자.. 삭제 자체는 스마트 포인터기 때문에 별도 관리가 없어도 된다 #include struct SData { }; class CMyClass { private: boost::lockfree::fifo m_Fifo; public: void Add(SData temp) { m_Fifo.enqueu.. 2011. 10. 24.