개요

 

std::thread 클래스 개요및 스레드 생성 코드 예, 클래스 멤버함수를 스레드로 실행시키는 방법 .

C++11부터 std::thread 클래스 로 스레드 생성 가능하며, VC++ (Visual Studio 2012 이후 )에서도 사용가능하다.
VC++에서 통상적인 스레드 생성하는 AfxBeginThread 방식(상세보기 -> http://igotit.tistory.com/211 ) 보다 많이 편하다.

헤더 : <thread>


 


 

 

1. std::thread 이용 스레드 생성 코드 예.

 

스레드 생성

std::thread myThread(func,this,1,2.f) ;

혹은 std::thread* pThread = new std::thread(func,this,1,2.f); // 동적 생성하는 경우.

설명 :  함수 func 를 스레드로 생성하며 동시에 3개의 인자 this, 1, 2.f를 전달하는 예.  
비교 : AfxBeginThread 로 생성시키는 경우 인자는 1개만 가능했으나 std:thread에서는 인자 수량 복수개 가능. 

스레드로 실행시킬 함수 예.
위 스레드 생성자에 인자로 전달하여 스레드로 생성시킬 함수 예.
class 의 staic 함수나 전역함수만 가능하며 클래스멤버함수 불가.
void func(LPVOID lParam, int i, float f)
{
...
}

스레드 실행 끝날때까지 대기.

std::thread myThread(func,this,1,2.f) ; // 스레드 생성
myThread.join(); // 상기 스레드 종료시 까지 여기서 대기하게됨.

 


 


 

2. 클래스 멤버함수를 스레드로 실행시키는 방법. - 람다 이용.

 

앞의 예와 같이 함수를 직접 생성자에 전달하는 방식인 경우 클래스의 static함수나 전역함수만 전달가능하다.


클래스의 멤버함수를 전달하여 스레드로 실행시키기 위해서는 람다 로 전달하는 방식으로 가능해진다. 


예. 클래스의 멤버함수가   void class::func() {} 로 정의되어있는데, 이 함수를 람다식으로 아래 처럼 하면

클래스 멤버함수가 스레드로 실행된다.


std::thread( [&] () { func(); } );

 

검정색이 람다 임.


 


 




 본 글이 포함된 상위 정리 장소.

 

 Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 


///559.

Posted by 리치굿맨

댓글을 달아 주세요