>>[C++ 관련 모든 글 보기]
1. thread관련 class는 무엇 인가??
1) 표준 체택 시기
- C++11 에서 표준으로 채택
1) namesapce
- std
2) Header
- #include <thread>
3) class
std::thread
2. thread 생성 방법 (4가지)
1) C 스타일 thread 생성 (함수 포인트 활용)
(1) 사용법
thread(thread로 돌릴 함수, 넘길 인자);
(2) 언제 쓰면 좋은가?
-
2) Class의 Static 함수를 사용한 Thread 생성
(1) 사용법
thread(Class명:thread로 돌릴 함수, 넘길 인자);
(2) 언제 쓰면 좋은가?
-
3) Class의 멤버 함수를 사용한 Thread 생성
(1) 사용법
thread(Class명:thread로 돌릴 함수, Class 생성자, 넘길 인자);
(2) 언제 쓰면 좋은가?
-
4) lambda 를 사용한 Class 멤버 함수 Thread 생성
- static이 아닌 클래스의 멤버함수를 Thread로 돌릴 수 있다.
(2) 언제 쓰면 좋은가?
-
5) lambda 를 사용한 Thread 생성
- Thread로 돌릴 내용을 바로 생성 한다.
(2) 언제 쓰면 좋은가?
-
예제 코드)
#include <iostream>
#include <thread>
using namespace std;
/*
* 함수포인트를 사용한 Thread 에제
* 유의 사항 : default Parametar는 사용 할 수 없다.
*/
void func_type_thread(int count) {
for(int i=1; i <= count; i++) {
cout<<"func point type : count "<<i<<endl;
}
}
/*
* class내 부의 static 함수화 멤버 함수를 사용한 Thread 예제
*/
class thread_test
{
public:
static void class_static_func_type_thread(int count) {
for(int i=1; i <= count; i++) {
cout<<"class static func type : count "<<i<<endl;
}
}
void class_func_type_thread(int count) {
for(int i=1; i <= count; i++) {
cout<<"class func type : count "<<i<<endl;
}
}
};
int main() {
// 1. C 스타일 thread 생성 (함수 포인트 활용)
thread thread1 = thread(func_type_thread, 10);
// 2. Class의 Static 함수를 사용한 Thread 생성
thread thread2 = thread(thread_test::class_static_func_type_thread, 10);
// 3. Class의 멤버 함수를 사용한 Thread 생성
thread thread3 = thread(&thread_test::class_func_type_thread, thread_test(), 10);
// 4. lamda를 사용하여 Class의 멤버 함수를 Thread로 생성
thread thread4([](int count) {
thread_test tt4;
tt4.class_func_type_thread(count);
}, 10);
// 5. lambda 를 사용한 Thread 생성
thread thread5([](int count) {
for(int i=1; i <= count; i++) {
cout<<"lambda type : count "<<i<<endl;
}
}, 10);
thread1.join();
thread2.join();
thread3.join();
thread4.join();
thread5.join();
return 0;
}
3. 고급
1) class안에서 Thread 실행 하기
핵심
- 1번 재 인자로 class에서 thread로 돌릴 함수의 주소를 넘긴다.
- 2번 this 를 넘긴다. (현재 생성된 객체를 넘기는 것을 의미)
#include <thread>
void Test::runMultiThread()
{
std::thread t1(&Test::calculate, this, 0, 10);
std::thread t2(&Test::calculate, this, 11, 20);
t1.join();
t2.join();
}
2) 비동기로 실행 결과 받기(async 사용)
#include <future>
void Test::runMultiThread()
{
auto f1 = std::async(&Test::calculate, this, 0, 10);
auto f2 = std::async(&Test::calculate, this, 11, 20);
auto res1 = f1.get();
auto res2 = f2.get();
}
출처 : stackoverflow.com/questions/10998780/stdthread-calling-method-of-class
4. 컴파일 방법
g++ thread thread.cpp -lpthread
5. thread 관리 모델 방법 (정리 필요)
- 필요 자료 https://thispointer.com/c11-how-to-create-vector-of-thread-objects/
6. thread 관리 모델 방법 (정리 필요)
- thread 내부 동작 원리
7. thread 종료 방법
>>[C++ 관련 모든 글 보기]
'ProgrammingLang > c++' 카테고리의 다른 글
[C++ 개발자되기] 6. istringstream, ostringstream, stringstream 사용법 (4) | 2019.07.24 |
---|---|
[C++ 개발자되기] 5. bind 사용법 (0) | 2019.07.23 |
[C++ 개발자되기] 4. lambda 사용법 (0) | 2019.07.19 |
[C++ 개발자되기] 2. C++ Class의 필요성과 사용법 (0) | 2019.07.18 |
[C++ 개발자되기] 1. C에는 없고 C++만 있는 것 (2) | 2019.07.17 |