首页| 论坛| 消息

回复: 程序运行一段时间,就异常崩溃
#6 [yunchao630 08-20 10:50]
你这个函数interfaceListing如果是多线程访问的,做一下互斥就好了
#7 回 九重水 的帖子 [介农酥 08-20 12:15]
九重水:楼主的公司真的是做PLC的吗?
同行?我做过上位机的PLC编译器和下位机的解释器。  (2019-08-19 17:45) 
这么厉害,不是。
#8 回 firebolt 的帖子 [介农酥 08-20 12:27]
firebolt:你这个任务挺简单的,但是设计的复杂了。这种情况不太好帮你找问题所在,归根结底是程序结构设计的问题。网络编程最基本的模式就是生产消费模式,数据采集是生产者,数据处理是消费者。它们可以通过消息队列来通讯。
.. (2019-08-18 12:57)
是4个线程,4个线程独立完成任务,每个服务器(摄像机)对应一个线程,C数据是需要根据服务器上的数据(就是摄像头扫的快递号和小车号),从厂家给的接口获取的,这个接口申通的是数据库,比较简单,中通的是http方式,比较麻烦,很慢四五十毫秒,而且是异步的。即这样
服务器A-Http-PLC
服务器B-Http-PLC
服务器C-Http-PLC
服务器D-Http-PLC

Socket4个实例(参数:不同的IP),Http有四个实例,PLC也有4个实例

因为4个socket是独立发数据的,这样可能同时发数据,那么Http就处理不过来了,后面的socket会覆盖前面的。
但是单个socket,一次发数据的间隔有几百毫秒,这样如果一个Http实例只接受一个Socket数据,就能来的及了,而且这样确实也解决了问题。

4个独立线程里面的对象应该都在不同的内存区,但是有些事静态的变量,比如一些配置,因为这些配置对所有的对象来说是一样的,所以我定义成了static。
哦,对了,这些数据都要发给主界面,通过信号和槽的方式,主线程只有一个实例,这算不算共享的存储区

麻烦,在看看,在提供一些思路
#9 回 小韩老师 的帖子 [介农酥 08-20 12:31]
小韩老师:4个tcpserver,软件上应该是4个客户端连接吧,如果是4个客户端则是4个线程。你的单线程和多线程是指如何处理,多线程调试多用打印,你调试打断点时候不知道进的是哪个线程。祝你好运! (2019-08-17 16:42) 
因为不知道错误,在哪,所以没法打断点,而且它是不断循环运行几千遍,才会出问题,如果打了断点,第一次就停下来了,无法看到错误,谢谢!
#10 回 fsu0413 的帖子 [介农酥 08-20 12:33]
fsu0413:问题可能出在公有资源竞争上
如果要做到线程物尽其用,要注意:
1. 线程的共享存储空间要少,而且要保证互斥 (两个线程同时取出i=14,同时对i+1,同时放回i,最后i的结果不是想象中的16而是15,需要通过加锁避免)
2. 线程间的等待要少(A等待B,B等待C,C等待D,到最后就D一个 .. (2019-08-17 20:04)
非常感谢,这里面没有那个线程要等那个,都是独立的,共享的就是一些静态变量吧。其他的每个对象的成员应该都是自己的吧
哦,对了,这些数据都要发给主界面,通过信号和槽的方式,主线程只有一个实例,这算不算共享的存储区

<< 1 2 3 >> (2/3)

回复 发表
主题 版块