C++多线程库中的各个子库都有各自的时间控制方式,依此来进行多线程程序运行中cpu资源的精确控制。
使用std::chrono
时间库可以提供微妙、毫秒、秒及以上的时间取用,并且能够获取当前系统时间。
如下代码
#include <iostream>
#include <fstream>
#include <mutex>
#include <thread>
#include <future>
#include <deque>
using namespace std;
int fun1(int n) {
int res = 1;
for (int i =n; i> 0; --i) {
res *= i;
}
cout << "Result is " << res << endl;
return res;
}
int main()
{
std::thread t1(fun1,6);
// 休眠2秒
std::this_thread::sleep_for(std::chrono::seconds(2));
//休眠静态时间点,当前线程从当前系统时间点开始 休眠2秒
std::chrono::steady_clock::time_point tp = std::chrono::steady_clock::now() + std::chrono::seconds(2);
std::this_thread::sleep_until(tp);
t1.join();
std::mutex mu;
std::unique_lock<std::mutex> locker(mu);
//condtion_variable条件变量的时间控制
std::condition_variable cond;
cond.wait_for(locker,std::chrono::seconds(2));
cond.wait_until(locker,tp);
//promise异步操作获取共享状态的时间控制
std::promise<int> p;
std::future<int> f = p.get_future();
f.wait_for(std::chrono::seconds(2));
f.wait_until(tp);
return 0;
}