頭文件:<thread> (C++11)
template<class Clock, class Duration>
void sleep_until(const std::chrono::time_point<Clock, Duration>& sleep_time);
作用:
阻塞當前正在執行的線程直到sleep_time溢出。
sleep_time是和時鍾相關聯的,也就是要注意時鍾調整會影響到sleep_time。因此,
時鍾的時長有可能或沒有可能會短於或長於sleep_time。Clock::now()返回調用這個函數時的時間,取決於調整方向。該函數也有可能因為調度或者資源競爭而導致阻塞時間延長到sleep_time溢出之后。
參數:
sleep_time 阻塞時長
返回值:
none
異常:
任何從Clock或Duration拋出的異常(由標准庫提供的時鍾和時長從來都不會拋出異常)
實例:
1 #include <iostream> 2 #include <iomanip> 3 #include <chrono> 4 #include <ctime> 5 #include <thread> 6 #pragma warning(disable:4996)//加上可去掉unsafe 請使用localtime_s的編譯報錯 7 int main() 8 { 9 using std::chrono::system_clock; 10 std::time_t tt = system_clock::to_time_t(system_clock::now()); 11 struct std::tm *ptm = std::localtime(&tt); 12 std::cout << "Current time: " << std::put_time(ptm, "%X") << '\n'; //必須大寫X,若小寫x,輸出的為日期 13 std::cout << "Waiting for the next minute to begin...\n"; 14 ++ptm->tm_min; 15 ptm->tm_sec = 0; 16 std::this_thread::sleep_until(system_clock::from_time_t(mktime(ptm))); 17 std::cout << std::put_time(ptm, "%X") << "reached!\n"; 18 getchar(); 19 return 0; 20 }
結果: