首页| 论坛| 消息

标题:程序运行一段时间,就异常崩溃
作者:介农酥
日期:2019-08-17 16:08
内容:

程序每次运行一段时间,就异常退出,没有任何提示,要么直接退出,要么弹出异常消息框。

程序主要功能:
1)从4个服务器上分别获取数据A和B(每个服务器(TcpServer)1秒发送一次数据,4个服务器独立发送,可以同时发,没有时间顺序);
2)根据数据A以HTTP的方式获取数据C;
3)最后将数据A、B和C发送给PLC,插入数据库,回传数据给Http。
不断从服务器上获取,不断重复后面的步骤。

今天突然想到到调试模式下运行下,发现报错了,代码跳到这个位置,我觉得这是一个很大的提示,截图如下:

错误的地方在GetAdaptersAddresses()。

这是又一次调试模式运行下报的错:
Invalid parameter passed to C runtime function(C++)
百度知道上有解释:是引用了空或者野指针,之所以会有空指针或者[backcol ..


#1 [小韩老师 08-17 16:42]
4个tcpserver,软件上应该是4个客户端连接吧,如果是4个客户端则是4个线程。你的单线程和多线程是指如何处理,多线程调试多用打印,你调试打断点时候不知道进的是哪个线程。祝你好运!
#2 [liulin188 08-17 16:46]
这种问题只能靠自己了
#3 [fsu0413 08-17 20:04]
问题可能出在公有资源竞争上
如果要做到线程物尽其用,要注意:
1. 线程的共享存储空间要少,而且要保证互斥 (两个线程同时取出i=14,同时对i+1,同时放回i,最后i的结果不是想象中的16而是15,需要通过加锁避免)
2. 线程间的等待要少(A等待B,B等待C,C等待D,到最后就D一个在工作,ABC都在浪费资源)
3. 线程间做的事依赖要少(依赖多了就等待了啊)
#4 [firebolt 08-18 12:57]
你这个任务挺简单的,但是设计的复杂了。这种情况不太好帮你找问题所在,归根结底是程序结构设计的问题。网络编程最基本的模式就是生产消费模式,数据采集是生产者,数据处理是消费者。它们可以通过消息队列来通讯。
结合到你这个程序,数据采集部分会从服务器获取ABC三类数据。其中C数据和A数据是关联数据。采集到这些数据后将他们放到消息队列中由数据处理线程处理,数据处理线程检查消息队列是否有数据,如果有会取出数据根据数据类型做不同的处理。至于消息队列怎么设计你可以查查相关的资料。我这里就不细说了。
#5 [九重水 08-19 17:45]
楼主的公司真的是做PLC的吗?
同行?我做过上位机的PLC编译器和下位机的解释器。

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

回复 发表
主题 版块