c++ 线程的激活和休眠

在C++中,线程的激活和休眠通常是通过标准库中的<thread>头文件和相关功能来实现的。但需要注意的是,C++标准库本身并没有直接提供“休眠”线程的函数,而是依赖于操作系统的功能来暂停线程的执行。

线程的激活

线程的激活是通过创建并启动一个std::thread对象来完成的。一旦你创建了一个std::thread对象并传递了一个可调用对象(如函数、lambda表达式、函数对象等)给它,调用其join()detach()方法(或让其在析构时自动分离)就会启动线程。

#include <iostream>
#include <thread>
void threadFunction() {
std::cout << "Thread is running...\n";
// ... 执行线程工作 ...
}
int main() {
std::thread t(threadFunction); // 线程创建并自动激活
t.join(); // 等待线程结束
return 0;
}

在上面的例子中,std::thread t(threadFunction);这行代码创建了一个线程对象t,并传递了threadFunction作为线程要执行的函数。这行代码会立即激活线程(即开始执行threadFunction)。

线程的休眠

线程的休眠不是C++标准库直接提供的功能,但你可以使用平台特定的API或第三方库来实现。在Unix/Linux系统中,你可以使用usleepnanosleep函数;在Windows系统中,你可以使用Sleep函数。然而,更可移植的方法是使用C++11中的<chrono>库与std::this_thread::sleep_forstd::this_thread::sleep_until

以下是一个使用std::this_thread::sleep_for让当前线程休眠的例子:

#include <iostream>
#include <thread>
#include <chrono>
void threadFunction() {
std::cout << "Thread is running...\n";
std::this_thread::sleep_for(std::chrono::seconds(2)); // 休眠2秒
std::cout << "Thread is continuing...\n";
// ... 线程继续执行 ...
}
int main() {
std::thread t(threadFunction);
t.join();
return 0;
}

在这个例子中,std::this_thread::sleep_for(std::chrono::seconds(2));这行代码使当前线程休眠2秒。这不会影响其他线程的执行,只有调用sleep_for的线程会被暂停。

请注意,休眠线程是一种阻塞操作,它会阻止线程继续执行,直到指定的时间间隔过去。因此,在编写多线程程序时要谨慎使用休眠,以避免不必要的性能下降或死锁问题。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值