오랜만에 쓰레드를 세팅하는데 많은 변동이 있었네요. 새로운 버전을 기준으로 다시 적습니다(2013. 8)
-----------------------------------------------------------------------------------------------------
아아- 콘솔 C 에서 스레드를 돌릴 수 있다니 정말 신나는 이야기 아닌가요? ㅋ
있다는 이야기는 들었지만 이상한 소문도 많고 세팅도 까다로운 것 같아. 사용하기는 왠지 조금 꺼려졌던 Boost.. 막상 써보니 Smart Point든 제공해주는 Array, 정규표현식 등. 유용한 도구들이 많은데 그 동안 왜 몰랐을까 하는 생각이 들더군요.
부스트라이브러리(http://www.boost.org)란?
부스트 라이브러리는 프로그래머에게 검증된(또는 검증되고 있는) 가벼운 C++ 소스 라이브러리 입니다. 이 라이브러리는 어플리케이션 개발에 있어 다방면에 광범위하고 유용하게 사용되는 것을 목표로 합니다. 그리고 부스트는 표준 C++ 라이브러리(STL)과 매우 잘 동작하도록 설계되어 있습니다. 또한 부스트 라이브러리 사용에 대한 라이센스는 상업적이든 비상업적이든 무료로 사용할 수 있어 비용에 대한 부담이 없습니다.
1. 먼저 Boost 를 다운 받은 뒤 설치해 줍니다.
(버전 별로 경로와 실행방법이 달라질 수 있습니다)
http://sourceforge.net/projects/boost/files/boost-binaries/
에서 최신버전(현재는 1.54.0 버젼) 클릭 >> 자신의 환경에 맞는 것으로 클릭 해야 하는데
자신에게 맞는 버젼으로 선택 / 다운로드
(예를들어 "boost_1_54_0-msvc-11.0-64"는
1. 부스트 1.54버젼의
2. msvc - MS사의 Visual Studio
3. 11은 비주얼스튜디오 2012버젼 (참고 : 10은 2010버젼, 9가 2008버젼, 8이 2005버젼)
4. 64비트 (비트수 확인방법 : 내컴퓨터 오른클릭 >> 속성
라는 의미)
2. 경로추가. 저는 스튜디오 2010을 쓰는데 설치된 부스트 폴더와 연결해줍니다. 이전 버젼에 비해 로컬(보통 C드라이브)에 설치하는 경우 Local이란 패스가 하나 더 추가 되었네요
속성 - C/C++ - 일반 - 추가포함디렉터리 : "C:\local\boost_1_54_0"
속성 - 링커 - 추가 라이브러리 디렉터리 : "C:\local\boost_1_54_0\lib" (※ VS 2012 버젼은 : C:\local\boost_1_54_0\lib32-msvc-11.0)
라고 경로를 추가 해 줍니다.
3. 코딩코딩~ //함수 속에 While문이 있고, 스레드 아래 join 이 Run이라고 볼 수 있어요
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
class CSampleIO
{
public:
void TestThread()
{
while(true) //일반적으로 while문을 빠져나가지 못한다고 생각하기 쉬운데 여기서는 그렇지 않음. Sleep으로 쉬는 동안 다른 스레드가 실행 될 수 있는 기회를 허용해 줌.
{
cout<<"1 ";
boost::this_thread::sleep(boost::posix_time::millisec(500));
}
}
void TestThreadSecond(int num)
{
while(true)
{
cout<<num<<" ";
boost::this_thread::sleep(boost::posix_time::millisec(500));
}
}
void TestThreadThird(int num, int num2)
{
while(true)
{
cout<<num<<" ";
boost::this_thread::sleep(boost::posix_time::millisec(500));
}
}
};
int main()
{
//객체생성
CSampleIO io;
//스레드생성(인자는 계속 추가 시킬 수 있음)
boost::thread th1 = boost::thread( boost::bind(&CSampleIO::TestThread, &io) );
boost::thread th2 = boost::thread( boost::bind(&CSampleIO::TestThreadSecond, &io, 2) );
boost::thread th3 = boost::thread( boost::bind(&CSampleIO::TestThreadThird, &io, 3, NULL) );
//join에서 해당 스레드가 시작 됨
th1.join();
th2.join();
return 0;
}
Sleep은 0.5초씩으로 동일 하지만 결과값은 1, 2, 3, 1, 2, 3 이 아닌 걸 확인 할 수 있죠. 각자 일하는 스레드니깐~
'2_ 바삭바삭 프로그래밍 > C and C++' 카테고리의 다른 글
C++ - rand, srand(난수발생), sleep(지연) (0) | 2012.05.31 |
---|---|
C++ - 쉽게 설명한 링크드리스트(Linked list) 이야기 (3) | 2012.05.30 |
C++ - gotoxy(좌표이동), setcolor(색상변경) (0) | 2012.05.24 |
C++ - 쉽게 설명한 포인터(point)와 레퍼런스(reference) 이야기 (1) | 2012.05.22 |
Visual C++ 2010 실행 시 콘솔창이 바로 닫혀 버릴때... (2) | 2012.05.21 |