get_id()
'get_id()'函数用于获取线程id
include // std::cout
include // std::thread, std::thread::id, std::this_thread::get_id
include // std::chrono::seconds
std::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";
else
std::cout << "This is not the main thread.\n";
}
int main()
{
is_main_thread();
std::thread th (is_main_thread);
th.join();
}
yield()
该函数的用途是让出该线程已获取的时间片,交给其他线程使用。
include // std::cout
include // std::thread, std::this_thread::yield
include // std::atomic
std::atomic 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;
}
sleep_until()
调用线程应恢复其执行的时间点。 请注意,多线程管理操作可能会导致超出此范围的某些延迟。 是表示特定绝对时间的对象
include // std::cout
include // std::put_time
include // std::this_thread::sleep_until
include // std::chrono::system_clock
include // std::time_t, std::tm, std::localtime, std::mktime
int 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;
}
代码的作用是获取当前时间,并等待到下一分钟开始时输出该时间。
代码解释:
include 部分包含了所需的头文件,用于输入输出、时间操作和线程操作。
main() 函数是程序的入口点。
using std::chrono::system_clock; 声明使用命名空间 std::chrono::system_clock,用于处理时间相关的操作。
std::time_t tt = system_clock::to_time_t(system_clock::now()); 获取当前时间并将其转换为 std::time_t 类型的变量 tt。
struct std::tm * ptm = std::localtime(&tt); 使用 std::localtime() 函数将 std::time_t 类型的时间转换为本地时间,并将结果存储在指向 std::tm 结构体的指针 ptm 中。
std::cout << "Current time: " << std::put_time(ptm,"%X") << '\n'; 输出当前时间,使用 std::put_time() 函数将 std::tm 结构体格式化为字符串。
++ptm->tm_min; ptm->tm_sec=0; 将下一分钟的时间设置为等待目标,即将 ptm 结构体中的分钟加一,并将秒数设置为零。
std::this_thread::sleep_until(system_clock::from_time_t(mktime(ptm))); 使用 std::this_thread::sleep_until() 函数使线程休眠直到指定的时间点,这里使用 system_clock::from_time_t() 函数将 ptm 结构体转换为 std::chrono::system_clock::time_point 类型的时间点。
std::cout << std::put_time(ptm,"%X") << " reached!\n"; 输出达到目标时间点时的时间。
总结:该段代码获取当前时间并等待到下一分钟开始时输出该时间。
sleep_for()
// this_thread::sleep_for示例
include // 标准输入输出流库,用于输出信息
include // 线程库,用于线程操作
include // 时间库,用于时间操作
int main()
{
std::cout << "倒计时开始:\n";
for (int i=10; i>0; --i) {
std::cout << i << std::endl; // 输出当前倒计时的数字
std::this_thread::sleep_for (std::chrono::seconds(1)); // 线程休眠1秒钟
}
std::cout << "发射!\n";
return 0;
}
这段代码演示了如何使用C++标准库中的this_thread::sleep_for函数进行线程休眠操作。代码的功能是进行一个简单的倒计时,从10开始递减到1,每次输出当前的数字,并在输出后暂停1秒钟,然后再继续下一个数字的输出。最后输出"发射!"表示倒计时结束。
在循环中,通过std::this_thread::sleep_for(std::chrono::seconds(1))来使当前线程休眠1秒钟。std::this_thread::sleep_for接受一个std::chrono::duration类型的参数,用于指定休眠的时间长度。在这里,我们使用std::chrono::seconds(1)来表示1秒钟的时间间隔。
通过使用线程休眠,我们可以在倒计时过程中添加一定的延迟,以控制输出的速度和时间间隔。这对于模拟实际场景或者需要等待一段时间后执行某些操作的情况非常有用