c++语言中如何写入文件,C++:在多线程程序中写入文件
你的代码很浪费,不遵循C++习惯用法。
从结尾开始:是的,write是线程安全的,因为win32 CRITICAL_SECTION可以保护它免受并发修改。
虽然:
为什么打开,每次关闭流?这是非常浪费的事情。在构造函数中打开流并将其打开。析构函数将处理关闭流。
如果你想使用Win32临界区,至少使其RAII安全。创建一个包含对临界区的引用的类,将其锁定在构造函数中并在析构函数中解锁它。这种方式,即使抛出异常 - 你保证锁将被解锁。
无论如何,CriticalSection的减速度在哪里?它应该是Log的成员。你知道吗std::mutex?
你为什么按价值传递字符串?这是非常无效的。然后通过const引用传递。
您对一些变量(file_path)使用snake_case,而对其他变量使用snake_case(CriticalSection)。使用相同的约定。
str从来都不是一个字符串变量的好名字,并且文件流不是日志。是真正的日志记录的事情。 logger是一个更好的名字。在我的更正中,只是将其命名为m_file_stream。
更正代码:
class Log
{
private:
std::mutex m_lock;
std::ofstream m_file_stream;
std::string m_file_path;
public:
Log(const std::string& file_path);
void write(const std::string& log);
};
Log::Log(const std::string& file_path):
m_file_path(file_path)
{
m_file_stream.open(m_file_path.c_str());
if (!m_file_stream.is_open() || !m_file_stream.good())
{
//throw relevant exception.
}
}
void Log::write(const std::string& log)
{
std::lock_guard<:mutex> lock(m_lock);
m_file_stream << log << '\n';
}
c++语言中如何写入文件,C++:在多线程程序中写入文件相关推荐
- C语言编程>第二十三周 ③ 下列给定程序中,函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序;然后把第三字符插入
例题:下列给定程序中,函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序.插入法的基本算法是:先对字符串中的头两个元素进行排序:然后把第三字符插入到前两个字符中,插入后前三个字 ...
- C语言编程>第二十周 ② 下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和b[0]中的数对调、次最大数和b[1]中的数对调。
例题:下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和b[0]中的数对调.次最大数和b[1]中的数对调. 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构. ...
- C语言编程>第二十五周 ① 给定程序中,函数fun的功能是:在形参s所指字符串中的每个非数字字符之后插入一个“*”号。
例题:给定程序中,函数fun的功能是:在形参s所指字符串中的每个非数字字符之后插入一个"*"号. 例如,形参s所指的字符串为:albc45sdtg56f,则执行结果为:a*1b*c ...
- C语言编程>第十八周 ⑧ 给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。
例题:给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列. 注意:请勿改动主函数main与其他函数中的任何内容,仅在横线上填写所需的若干表达式或语句. 代码如 ...
- C语言编程>第二十五周 ② 下列程序中,函数fun的功能是:将大写字母转换为对应小写字母之后的第五个字母,若为小写字母为v~z,使小写字母的值减21,转换后的小写字母作为函数值返回。
例题:下列程序中,函数fun的功能是:将大写字母转换为对应小写字母之后的第五个字母,若为小写字母为v-z,使小写字母的值减21,转换后的小写字母作为函数值返回. 例如,若形参是字母A,则转换为小写字母 ...
- 多线程程序中操作的原子性--转帖
多线程程序中操作的原子性 0. 背景 原子操作就是不可再分的操作.在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头.本文主要讨论了三个问题: ...
- 多线程程序中操作的原子性
0. 背景 原子操作就是不可再分的操作.在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头. 本文主要讨论了三个问题: 1. 多线程程序中对变 ...
- exists 实现查看表Activity中FmyId=1(具体数字在程序中动态给定)的好友发起的活动
一个数据库tb 两个表:FriendTable Activity 其中 FriendTable : 内容 Activity: 内容: 实现查看表Activity中FmyId=1(具体数字在程序中动态 ...
- 多线程编译与运行linux,Linux系统下多线程程序编译makefile文件
在Linux下,编译一个多线程的程序命令为: gcc -lpthread -o file file.c 在Linux下,用交叉编译器编译一个在uclinux下运行的多线程程序,makefile文件如下 ...
- ip地址转换数字函数 iton_c# – RabbitMQ CreateConneciton问题 – 在一个应用程序中运行,但在另一个应用程序中运行...
所以这是连接代码. var factory = new ConnectionFactory { HostName = "myserver", UserName = "te ...
最新文章
- 港中大、商汤开源目标检测工具包mmdetection,对比Detectron如何?
- c语言的非法字符常量,判断C语言数值常量是否合法?为什么不合法?
- 线程池之工作项,等待项,计时项 (存在疑问???)
- 复现经典:《统计学习方法》第 7 章 支持向量机
- 三十九、@staticmethod、@classmethod和@property类装饰器
- 全端开发——html简介与常用标签
- [Noi2016]区间
- db2 设置表 not null
- java项目学习_一个Java项目的学习
- 软件测试,何去何从?想安逸不可能!软饭得硬吃...我整理的超全学习指南【值得每个测试一看】
- java解析ceb文件_什么是Java的平台无关性
- 一道不知道哪里来的容斥题
- 主流PLC解密软件,西门子smart,200 松下PLC欧姆龙三菱解密
- 汽车功能安全标准“ISO 26262”导入实践(上)
- ps快捷键大法(最全)
- Linux的du命令
- SEEDLAB2.0-Meltdown
- blob写法的浏览器兼容性
- linux c语言 写文件,linux c通过文件描述符以及write和read方法对文件进行读写
- 不自量力是个恶毒的形容词,但这种心态是最不应该被嘲笑的