c++ 线程的激活和休眠

server/2024/9/23 2:57:23/

在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的线程会被暂停。

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


http://www.ppmy.cn/server/39513.html

相关文章

Spring Security基础教程:从入门到实战

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c…

软考中级-软件设计师(九)数据库技术基础 考点最精简

一、基本概念 1.1数据库与数据库系统 数据&#xff1a;是数据库中存储的基本对象&#xff0c;是描述事物的符号记录 数据库&#xff08;DataBase&#xff0c;DB&#xff09;&#xff1a;是长期存储在计算机内、有组织、可共享的大量数据集合 数据库系统&#xff08;DataBas…

SOCKET编程(3):相关结构体与函数

相关结构体与函数 sockaddr、sockaddr_in结构体 sockaddr和sockaddr_in详解 struct sockaddr共16字节&#xff0c;协议族(family)占2字节&#xff0c;IP地址和端口号在sa_data字符数组中 /* Structure describing a generic socket address. */ struct sockaddr {__SOCKADDR…

【全开源】Java共享台信息共享系统源码

特色功能 信息整合与共享&#xff1a;该平台提供一站式信息整合服务&#xff0c;将各种类型的信息资源进行汇聚&#xff0c;方便用户快速查找和获取所需资源。多种共享功能&#xff1a;支持信息共享、共享车位、共享会议室、共享电动车等多种共享功能&#xff0c;提高资源利用…

对多重继承关系的父子抽象类中子类的方法进行测试时如何回避Mock父类中的Protected方法

标题的说法就比较绕口&#xff0c;但是这个具体的问题大家看了下面内容就明白了。 如果在自己工作中遇到类似问题时可以试试这个解决办法。如果您技术好的话&#xff0c;其实不仔细看也行的&#xff0c;哈哈。 假设你有以下的类结构&#xff0c;该如何使用junit5,cdi-unit,moc…

spring alibaba中的seata分布式事务

Seata AT 模式设计思路 一阶段&#xff1a;业务数据和回滚日志记录在同一个本地事务中提交&#xff0c;释放本地锁和连接资源。 核心在于对业务sql进行解决解析&#xff0c;转换成undolog&#xff0c;并同时入库存 二阶段&#xff1a; 提交异步化&#xff0c;非常快速地完成…

抖音探店达人收费标准是怎样的?

商家们纷纷将目光投向这些具有影响力的抖音探店达人&#xff0c;希望通过合作推广&#xff0c;提升店铺的知名度和口碑。接下来伯乐网络传媒给大家揭秘抖音探店达人的收费标准。 一、抖音探店达人收费标准影响因素 1. 粉丝数量与收费标准的关系 抖音探店达人的收费标准与粉丝…

LeetCode 每日一题 ---- 【2105. 给植物浇水 II】

LeetCode 每日一题 ---- 【2105. 给植物浇水 II】 2105.给植物浇水II方法&#xff1a;模拟双指针 2105.给植物浇水II 方法&#xff1a;模拟双指针 今天是给植物浇水II&#xff0c;昨天是I&#xff0c;本质上和昨天的没有区别&#xff0c;都是模拟&#xff0c;今天额外需要注意…