本文主要是介绍std :: this_thread,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
this_thread 包装了一组可以访问当前线程信息的函数
functions
1、get_id() 获取当前线程的id。
// thread::get_id / this_thread::get_id
#include <iostream> // std::cout
#include <thread> // std::thread, std::thread::id, std::this_thread::get_id
#include <chrono> // std::chrono::secondsstd::thread::id main_thread_id = std::this_thread::get_id();void is_main_thread() {if ( main_thread_id == std::this_thread::get_id() )std::cout << "This is the main thread.\n";elsestd::cout << "This is not the main thread.\n";
}int main()
{is_main_thread();std::thread th (is_main_thread);th.join();
}
输出结果
This is the main thread.
This is not the main thread.
2、yield()
调用线程放弃执行,回到准备状态,重新分配cpu资源。所以调用该方法后,可能执行其他线程,也可能还是执行该线程
// this_thread::yield example
#include <iostream> // std::cout
#include <thread> // std::thread, std::this_thread::yield
#include <atomic> // std::atomicstd::atomic<bool> ready (false);void count1m(int id) {while (!ready) { // wait until main() sets ready...std::this_thread::yield();}for (volatile int i=0; i<1000000; ++i) {}std::cout << id;
}int main ()
{std::thread threads[10];std::cout << "race of 10 threads that count to 1 million:\n";for (int i=0; i<10; ++i) threads[i]=std::thread(count1m,i);ready = true; // go!for (auto& th : threads) th.join();std::cout << '\n';return 0;
}
输出结果
race of 10 threads that count to 1 million...
6189370542
3、template <class Clock, class Duration>
void sleep_until (const chrono::time_point<Clock,Duration>& abs_time);
阻塞调用线程,一直到指定事件
// this_thread::sleep_for example
#include <iostream> // std::cout
#include <iomanip> // std::put_time
#include <thread> // std::this_thread::sleep_until
#include <chrono> // std::chrono::system_clock
#include <ctime> // std::time_t, std::tm, std::localtime, std::mktimeint main()
{using std::chrono::system_clock;std::time_t tt = system_clock::to_time_t (system_clock::now());struct std::tm * ptm = std::localtime(&tt);std::cout << "Current time: " << std::put_time(ptm,"%X") << '\n';std::cout << "Waiting for the next minute to begin...\n";++ptm->tm_min; ptm->tm_sec=0;std::this_thread::sleep_until (system_clock::from_time_t (mktime(ptm)));std::cout << std::put_time(ptm,"%X") << " reached!\n";return 0;
}
输出结果
Current time: 11:52:36
Waiting for the next minute to begin...
11:53:00 reached!
4、template <class Rep, class Period>
void sleep_for (const chrono::duration<Rep,Period>& rel_time);
阻塞调用线程,一直到指定时间段后。
// this_thread::sleep_for example
#include <iostream> // std::cout
#include <thread> // std::this_thread::sleep_for
#include <chrono> // std::chrono::secondsint main()
{std::cout << "countdown:\n";for (int i=10; i>0; --i) {std::cout << i << '\n';std::this_thread::sleep_for (std::chrono::seconds(1));}std::cout << "Lift off!\n";return 0;
}
输出结果
countdown:
10
9
8
7
6
5
4
3
2
1
Lift off!
这篇关于std :: this_thread的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!