命名空间多线程计时(C++基础)

news/2024/12/2 12:40:43/

命名空间 

不要在头文件内使用using namespace,一定要确保实在一个足够小的作用域下使用,在哪个范围内,比如函数、if语句等,但一定不要在头文件中使用!!!

上述示例中,会调用orange中的print,因为apple中的print输入需要做隐性转换,但如果把orange去掉,apple中又可以正常使用,这样很容易造成一些错误,所以一定不要轻易使用命名空间,就使用apple::print就可以。

C语言中没有命名空间的概念,所以函数名称都包括库名称,C++中则不必这样

引入命名空间的时候可以只引入其中某个函数,下图中endl就会报错,因为没有被引入其中:

	using std::cout;cout << "x" << endl;

命名空间可以嵌套:

namespace orange {namespace apple {void print() {std::cout << "hello" << std::endl;}}
}
int main() {using namespace orange;using namespace apple;print();

命名空间不能滥用,如果滥用了,那函数在命名空间中本来的含义又有什么意义呢

命名空间存在的意义就是在自己定义的命名空间里函数可以任意命名!

多线程

引入库文件

#include<thread>

任务:使用一个线程来打印hello,当按下enter,停止打印。】、

在不使用静态变量的境况下使用指针函数做引用传参,正好复习一下昨天学习的内容:

void printHello(bool& judgeCon){using namespace std::literals::chrono_literals;std::cout << "started thread id = " << std::this_thread::get_id() << std::endl;while (judgeCon) {std::cout << "hello" << std::endl;std::this_thread::sleep_for(1s);//std::this_thread使用它来给当前线程下载命令}
}
int main() {bool judgeCon = true;//接收函数指针std::thread worker(printHello,std::ref(judgeCon));std::cin.get();judgeCon = false;worker.join();std::cout << "started thread id = " << std::this_thread::get_id() << std::endl;std::cin.get();
}

其中std::this_thread使用它来给当前线程下达命令。

计时

大部分情况都使用这个库来进行计时,

#include<thread>
#include<chrono>using namespace std::literals::chrono_literals;auto start = std::chrono::high_resolution_clock::now();std::this_thread::sleep_for(1s);auto end = std::chrono::high_resolution_clock::now();std::cout << (float)(end - start).count() << std::endl;

在实际使用中,可以借用结构体生命周期的特殊之处来完成计时器的构建:

struct Timer1
{std::chrono::steady_clock::time_point start, end;Timer1() {auto start = std::chrono::high_resolution_clock::now();}~Timer1() {auto end = std::chrono::high_resolution_clock::now();std::cout << (float)(end - start).count() << std::endl;}
};
void printAll() {Timer1();for (int tmp : {0, 1, 2, 3, 4, 5}) {std::cout << tmp << "\n";}
}
#mainprintAll();

但是不知道为什么构造函数执行结束之后就执行了析构函数。

使用std::endl会让代码变慢,因为它不仅在输出流中插入换行符,还会执行额外的操作来清空缓冲区。具体分析如下:

  • 插入换行std::endl" "都能在输出流中插入换行符。
  • 刷新缓冲区std::endl会立即刷新输出缓冲区。这意味着所有的缓冲数据都会被发送到目标设备(如屏幕或文件),并且缓冲区会被清空。这个刷新过程需要时间,特别是当数据量很大时,它会显著增加I/O操作的时间。

相比之下,使用" "仅仅插入了一个换行符,不会触发缓冲区的刷新,因此在某些情况下可以提供更快的输出速度。然而,如果不手动刷新缓冲区,输出的数据可能会滞留在缓冲区中,直到缓冲区被填满或程序结束。

总的来说,如果对输出速度有较高要求,可以考虑使用" "来代替std::endl,并在适当的时机手动调用std::cout.flush()或等待缓冲区自然刷新,以达到既快速又确保数据完整的效果。


http://www.ppmy.cn/news/1381047.html

相关文章

iOS 17.4报错: libopencore-amrnb.a[arm64]

iOS 17.4报错&#xff1a; libopencore-amrnb.a[arm64] iOS 17.4 模拟器运行报错解决方案 iOS 17.4 模拟器运行报错 Building for ‘iOS-simulator’, but linking in object file (/XXX/lib/libopencore-amrnb.a[arm64]2) built for ‘iOS’ 解决方案 在Podfile里添加如下设…

【Golang星辰图】 编织自动化魔法:使用 Go 语言中的自动化和部署工具构建可靠的基础设施

Go 语言中的自动化和部署&#xff1a;使用 Ansible、Docker、Kubernetes、Terraform、Jenkins、GitLab 和 Vault 的详细指南 前言&#xff1a; 自动化和部署是当今软件开发生命周期中不可或缺的环节。使用自动化工具可以提高效率、降低成本、减少人为错误&#xff0c;并使软件…

【HomeAssistant新版文件管理器】

【HomeAssistant新版文件管理器】 1. 前言2. 地址3. 安装4. 使用方法5. 总结欢迎大家阅读2345VOR的博客【Home Assistant 之QQ邮箱推送提醒】🥳🥳🥳2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号🎉🎉、阿里云《arduino专家博主》👻👻👻,座右铭:…

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt

【YOLOv9】训练模型权重 YOLOv9.pt 重新参数化轻量转为 YOLOv9-converted.pt 1. 模型权重准备2. 模型重新参数化2.1 文件准备2.2 参数修改2.3 重新参数化过程 3. 重新参数化后模型推理3.1 推理超参数配置3.2 模型推理及对比 4. onnx 模型导出&#xff08;补充内容&#xff09;4…

简单的torch网络模型记录

线性dense网络结构&#xff0c;输入(B,W) class Model(nn.Module):def __init__(self):super().__init__()self.media_type_embed nn.Embedding(num_media_type, embed_dim)self.mid_scroe_embed nn.Embedding(num_mid_score, embed_dim)#self.cat torch.cat()self.model …

剑指offer C ++双栈实现队列

1. 基础 队列&#xff1a;先进先出&#xff0c;即插入数据在队尾进行&#xff0c;删除数据在队头进行&#xff1b; 栈&#xff1a;后进先出&#xff0c;即插入与删除数据均在栈顶进行。 2. 思路 两个栈实现一个队列的思想&#xff1a;用pushStack栈作为push数据的栈&#xff…

ImportError: libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

报错&#xff1a; ImportError: /public/software/compiler/gcc/gcc-9.3.0/lib64/libstdc.so.6: version GLIBCXX_3.4.29 not found (required by /public/home/python3.8/site-packages/pandas/_libs/window/aggregations.cpython-38-x86_64-linux-gnu.so)这个ImportError表…

细粒度IP定位参文2(Corr-SLG):A street-level IP geolocation method (2021年)

[2]S. Ding, F. Zhao, and X. Luo, “A street-level IP geolocation method based on delay-distance correlation and multilayered common routers,” Secur. Commun. Netw., vol. 2021, no. 1, pp. 1–10, 2021. 智能设备的地理位置可以帮助提供多媒体内容提供商和5G网络中…