一个实时数据采集的方案应该如何定

cnyfkk 2014-01-19 02:19:11
问问CSDN的各大高手们,我有个实时数据采集的需求是这样的,我的程序要不断的通过TCP协议发送各种参数给设备,并且设备会马上返回我要的当前数据数据(每一秒钟会这样交互一次)。设备有50台每一台有一个固定的IP.

我当前的做法是这样的,每一台都对应一个死循环的线程 一个定时器和一个socket,定时器的作用是让死循环的线程通过标记能做到定时发送接收数据。

但是我发现这样的做法效率相当的低,同时对4个设备工作时CPU的占有率就到90%了,程序基本不动了。

大家还有其他好的方式,或这类程序有其他比较成熟的解决方案吗?谢谢了
...全文
250 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
l4kangaxx 2014-01-21
  • 打赏
  • 举报
回复
做一个线程池,程序常驻线程两个,一个负责接受一个负责发送。每次接受到一个信号时开启一个线程做一些固定的工作,然后将这个线程关闭。这样符合你的需求么?
l4kangaxx 2014-01-21
  • 打赏
  • 举报
回复
最好不要让工作线程去影响ui线程,ui体验会下降的,不过在正式定型之前这么做倒有一个额外的好处:工作线程内的bug在界面上一览无余,也许你可以在最终发布之前这么做一下看看? 如果你的开发任务时间很紧就不要搞那么花哨了,用线程间共享内存试试,如果觉得太高端,也可一考虑用文件或者数据库来传递信息:工作线程写文件,ui线程每过5,6秒读一次文件。
引用 6 楼 cnyfkk 的回复:
[quote=引用 5 楼 lion_kangaxx 的回复:] 做一个线程池,程序常驻线程两个,一个负责接受一个负责发送。每次接受到一个信号时开启一个线程做一些固定的工作,然后将这个线程关闭。这样符合你的需求么?
你这个方法其实是我最想用的,但是受限于我对QT浅薄的了解,我担心我驾驭不了,线程池和使用普通线程一样可以响主界面发信号,定时刷新界面吗?[/quote]
cnyfkk 2014-01-21
  • 打赏
  • 举报
回复
引用 5 楼 lion_kangaxx 的回复:
做一个线程池,程序常驻线程两个,一个负责接受一个负责发送。每次接受到一个信号时开启一个线程做一些固定的工作,然后将这个线程关闭。这样符合你的需求么?
你这个方法其实是我最想用的,但是受限于我对QT浅薄的了解,我担心我驾驭不了,线程池和使用普通线程一样可以响主界面发信号,定时刷新界面吗?
cnyfkk 2014-01-19
  • 打赏
  • 举报
回复
是这样的我的软件相当于是客户端而不是服务器端,我的50个连接是相当于50个客户端的连接
cnyfkk 2014-01-19
  • 打赏
  • 举报
回复
引用 1 楼 masterz 的回复:
看看boost.asio,不需要那么多线程。
你说的这个我还没有看,你的意思是我没有必要使用这么多的定时器和线程?问题是我有50个socket的连接难道都在一个线程和定时器里面做?
vcf_reader 2014-01-19
  • 打赏
  • 举报
回复
哪需要开这么多线程?
masterz 2014-01-19
  • 打赏
  • 举报
回复
看看boost.asio,不需要那么多线程。

16,201

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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