오보에블로그
[C++] std::this_thread 사용법 본문
728x90
C++ this_thread
- 현재 스레드에 접근할 수 있는 함수 라이브러리
get_id
- 현재 스레드의 아이디 반환
/*
output :
main thread ID : 37832
t1 thread ID : 18204
func called! thread ID : 18204
*/
#include <thread>
#include <iostream>
using namespace std;
void func()
{
cout << "func called! " << "thread ID : " << this_thread::get_id() << endl;
}
int main() {
cout << "main thread ID : " << this_thread::get_id() << endl;
thread t1(func);
cout << "t1 thread ID : " << t1.get_id() << endl;
t1.join();
}
sleep_for
- 지정 슬립 시간 만큼 현재 스레드의 실행을 멈춘다.
/*
output :
10초 카운트
10
9
8
7
6
5
4
3
2
1
붐!
*/
#include <thread>
#include <iostream>
#include <chrono> // std::chrono::seconds
using namespace std;
void func()
{
cout << "10초 카운트" << endl;
for (int i = 10; 0 < i; i--)
{
cout << i << endl;
this_thread::sleep_for(std::chrono::seconds(1));
}
cout << "붐!" << endl;
}
int main() {
thread t1(func);
t1.join();
}
yield
- 현재 스레드 실행을 다시 예약하여, 다른 스레드를 실행할 수 있게함.
- 비유로, 맨 앞에 사람(현재 스레드)이 다시 뒤로 가는 경우.
/*
output :
func 진입!
not yet ..
...
not yet ..
붐..!
*/
#include <thread>
#include <iostream>
#include <chrono> // std::chrono::seconds
using namespace std;
bool ready = false;
void func()
{
cout << "func 진입!" << endl;
while (!ready)
{
cout << "not yet .. " << endl;
this_thread::yield();
}
cout << "붐..!" << endl;
}
int main() {
thread t1(func);
this_thread::sleep_for(std::chrono::milliseconds(1));
ready = true;
t1.join();
}
728x90
'C++ & C# > C++' 카테고리의 다른 글
[C++] Modern C++ 버전 별 문법 정리 (0) | 2022.05.01 |
---|---|
[C++] 멀티 스레드 와 mutex (0) | 2022.02.27 |
[C++] std::thread 사용법 (0) | 2022.02.24 |
[C++Docs] 타입 최대 최소 define 상수 라이브러리 (0) | 2022.01.10 |
[시스템프로그래밍] 리눅스 쉘 (명령어 해석기)만들기 (0) | 2019.07.05 |