求教 C++技术问题

hgdwwwq 2012-09-12 09:22:09
目前我遇到一个问题,我设计了一个日志系统,按照优先级,分别有不同的类,将日志存在不同的类似list容器内,当容器内有日志时,我需要按照级别的高低处理这些日志,将其发送至日志服务器(高级别的先发送,低级别的后发送),我的问题是除了用线程循环控制,信号槽控制,还有什么办法呢?

线程循环控制就是我另开一线程,无线循环检查是否有日志到达容器,有的话先发送高级别的,再发送低级别的

信号槽控制,就是把日志到达容器作为信号,去出发处理函数(这个知识参考Qt,还不知具体如何实现)。

望知道了解的高人指导,也欢迎大家讨论。
...全文
108 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgdwwwq 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我写过日志服务器,感觉你这个想复杂了。
1,服务器可以以 level 限定要发送的日志级别。因为按照你说的,“线程循环控制就是我另开一线程,无线循环检查是否有日志到达容器,有的话先发送高级别的,再发送低级别的”。我猜这样基本都会把日志全部发送出去,无非是你的日志非得缓冲一下,而且还按level排序,这个都是做一些多余的事情。当然,这个是我猜,因为一般的服务器性能,一般的日志产生量,根本到不了你……
[/Quote]
谢谢您的指教,但是拿到这个设计,我只能按照这个设计去做,我沟通过,但是没用。另外我们的系统带有2000几百块控制板,可能有时会用到这个优先级队列,我也知道这样设计确实有点过了。
总之,谢谢您的指点
冻结 2012-09-12
  • 打赏
  • 举报
回复
我写过日志服务器,感觉你这个想复杂了。
1,服务器可以以 level 限定要发送的日志级别。因为按照你说的,“线程循环控制就是我另开一线程,无线循环检查是否有日志到达容器,有的话先发送高级别的,再发送低级别的”。我猜这样基本都会把日志全部发送出去,无非是你的日志非得缓冲一下,而且还按level排序,这个都是做一些多余的事情。当然,这个是我猜,因为一般的服务器性能,一般的日志产生量,根本到不了你想的情况。就算到了,你直接设置低于某level的日志不产生出来,不就可以了吗?所以我做的,就是产生日志,大于设置的level,直接TCP,发送。
2,你的日志服务器,可能要接受N多服务器发来的日志,这个才是关注的重点。因为我们的日志没有那么恐怖,所以,我的解决方案,两个线程,一个接收TCP包,组成日志,放入缓冲队列(两个线程,可以无锁)。在组成日志时可以设定要写入文件的级别,如果日志量大,就设置高一点,小就低。这个也可以通知发送方,安装我设置的日志level发。另一个线程从缓冲队列里去日志,写文件,当然,写不过来,就丢掉。当然很少写不过来,因为前边说了,日志量没有那么恐怖,而且可以设置level,调节写日志的量。
hgdwwwq 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

用这个优先级队列,std::priority_queue
[/Quote]
我的重点在于除了以上两种方法处理,还可以怎么处理,或者C++的其他处理技术。不是用什么队列
冻结 2012-09-12
  • 打赏
  • 举报
回复
用这个优先级队列,std::priority_queue
hgdwwwq 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

用map,key是级别,value是消息列表
用一个线程来接收日志
当服务器有空时,向这个map取日志
[/Quote]
我现在需要处理发送端,你说的主要指接受端的工作。
ouyh12345 2012-09-12
  • 打赏
  • 举报
回复
用map,key是级别,value是消息列表
用一个线程来接收日志
当服务器有空时,向这个map取日志

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧