• 4536阅读
  • 11回复

[提问]多个对象向同一个文件追加内容 [复制链接]

上一主题 下一主题
离线介农酥
 

只看楼主 倒序阅读 楼主  发表于: 2019-09-05
回复本帖可获得10RMB金钱奖励!
每人最多可获奖2次,奖池剩余10RMB金钱 (中奖几率60%)
几个对象向同一个文件追加内容,记录日志。之间我将文件和流都定义成静态的,但是static的变量或者方法总是引起程序运行一段时间崩溃,我没办法就全改成普通的了,但这样,不同的对象写入的内容不是追加,而是直接覆盖之前对象写的。
想问下有什么方法,还有,这个static为什么会引起程序崩溃啊,我实在不明白,关于崩溃这个相关的问题,我之前还这上面写过提问
http://www.qtcn.org/bbs/read-htm-tid-86080.html



离线沉默小ai

只看该作者 1楼 发表于: 2019-09-05
回帖奖励+ 10
加一把锁呗,这样不会造成资源竞争
离线XChinux

只看该作者 2楼 发表于: 2019-09-05
你多个对象在不同线程中吗?同一个线程没问题吧。

另一种方法,就是你不同对象通过发送信号给某一个写对象来执行。信号连接时注意参数,好支持跨线程,以保证写对象按顺序写入。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线firebolt

只看该作者 3楼 发表于: 2019-09-05
回帖奖励+ 10
如果单纯写日志,推荐一个轻量级日志库给你用吧,别自己折腾了,看了一些你的问题贴,感觉你对多线程编程缺乏经验,先找本书看看吧。
https://github.com/google/glog.git
离线介农酥

只看该作者 4楼 发表于: 2019-09-06
回 XChinux 的帖子
XChinux:你多个对象在不同线程中吗?同一个线程没问题吧。
另一种方法,就是你不同对象通过发送信号给某一个写对象来执行。信号连接时注意参数,好支持跨线程,以保证写对象按顺序写入。 (2019-09-05 16:51) 

对,不同线程。你后面的方法好哇,把所有要写日志的对象通过信号把内容发日志对象来写,这样既不用static,也不会混了,谢谢!但你后面“信号连接时注意参数,好支持跨线程,以保证写对象按顺序写入”,不太明白。

其实是这样的,我的一个线程里有好几个对象是按顺序写入,按调用关系有前后,这几个按你说的,应该是可以顺序写入的,同时4个线程里又有这个对象,估计是线程里的乱了。

这个static我现在都不敢用了,线程用多了也崩,说多了,多少泪。目前还是不知不解。
离线介农酥

只看该作者 5楼 发表于: 2019-09-06
回 沉默小ai 的帖子
沉默小ai:加一把锁呗,这样不会造成资源竞争[表情]  (2019-09-05 16:43) 

我不敢加锁了,之前有个问题加锁了,运行一段时间,不解锁了。
离线介农酥

只看该作者 6楼 发表于: 2019-09-06
回 firebolt 的帖子
firebolt:如果单纯写日志,推荐一个轻量级日志库给你用吧,别自己折腾了,看了一些你的问题贴,感觉你对多线程编程缺乏经验,先找本书看看吧。
https://github.com/google/glog.git (2019-09-05 22:29) 

好的,谢谢!
离线介农酥

只看该作者 7楼 发表于: 2019-09-06
回 介农酥 的帖子
介农酥:好的,谢谢! (2019-09-06 09:12)

离线介农酥

只看该作者 8楼 发表于: 2019-09-06
回 firebolt 的帖子
firebolt:如果单纯写日志,推荐一个轻量级日志库给你用吧,别自己折腾了,看了一些你的问题贴,感觉你对多线程编程缺乏经验,先找本书看看吧。
https://github.com/google/glog.git (2019-09-05 22:29) 

你有推荐的书吗!
离线angelus

只看该作者 9楼 发表于: 2019-09-06
我写日志比较佛系,就是异步日志写入,唯一缺点就是程序突然崩溃,会有来不及写入的日志丢失
不过这不是大问题,日志本来就是记录的,不是调试用的

方法就是 使用系统的函数自己实现日志处理,把所有的日志都写进一个队列容器中,然后开一个日志线程,定时去访问容器,加锁去获取数据,然后批量处理

离线firebolt

只看该作者 10楼 发表于: 2019-09-06
回 介农酥 的帖子
回帖奖励+ 10
介农酥:你有推荐的书吗! (2019-09-06 09:14) 

C++面向对象多线程编程
离线介农酥

只看该作者 11楼 发表于: 2019-09-06
回 angelus 的帖子
angelus:我写日志比较佛系,就是异步日志写入,唯一缺点就是程序突然崩溃,会有来不及写入的日志丢失
不过这不是大问题,日志本来就是记录的,不是调试用的
方法就是 使用系统的函数自己实现日志处理,把所有的日志都写进一个队列容器中,然后开一个日志线程,定时去访问容器,加锁去获取 .. (2019-09-06 09:49) 

虽然不是实时写入,但确实很节省资源,好方法!
快速回复
限100 字节
 
上一个 下一个