程序运行一段时间后会卡死

时间:2021-05-07 15:21:59
在Wince上编了一个软件,功能很简单,保存修改数据到Xml,反应下位机数据到屏上,传递上位机数据给下位机!
现在程序运行一段时间后会卡死,整个屏幕都动不了了,能力有限,找不到原因出哪了?
程序中应该只有两个线程,一个UI线程(定时器产生的事件应该属于UI线程的吧?),一个有串口中断产生的线程,希望大家能够给我点解决思路!

14 个解决方案

#1


会卡死,是不是出现了无限循环或者占用内存太大导致了,好好检查下。注意细节

#2


检查下不要因为定时器产生了定时递归,还有事件不要重复添加。

#3


曾经做了小软件,用来检测当前的内存使用率,运行了大概4、5个小时后,内存的使用率没有变化!我问下哈,如果我有全局变量 a,在串口中断中 对a 进行赋值,在定时器中,对a取值,这样会不会出现卡死的状态啊?

#4


定时递归是什么意思啊?

#5


估计是线程死锁。

#6


线程死锁是怎么产生的呢?

#7


可以查看CE的进程管理器,查看内存使用是不是随着时间增加而一直增加

#8


做过一个小软件 进行监视了!!软件运行了3小时后 没怎么增加

#9


新的状况:昨天卡死了,然后过去按界面,怎么按都没反应,可是过了一段时间后,再去按结果又可以按了,程序也活过来了!这个是什么情况?
如果我有全局变量 a,在串口中断中 对a 进行赋值,在定时器中,对a取值,这样会不会出现卡死的状态啊?

#10


是不是有联网操作的啊,联网操作会不会网络较慢(局域网也算)或是不通

#11


先加入log机制,进行分析。

#12


一定要注意,不要滥用定时器。如果是收到数据然后异步处理,这就是数据触发的,而不是什么定时器触发的。我们招聘的实习生,最喜欢用定时器,做出了无数让界面卡死的“时髦”设计,最后我们不得不一一删除这些垃圾代码。滥用定时器是他们最喜欢的偷懒思路。

该是什么触发就是什么触发,尽可能认真分析数据和控制流程、不要简单地想成定时。不要滥用定时器。

#13


引用 12 楼 sp1234 的回复:
一定要注意,不要滥用定时器。如果是收到数据然后异步处理,这就是数据触发的,而不是什么定时器触发的。我们招聘的实习生,最喜欢用定时器,做出了无数让界面卡死的“时髦”设计,最后我们不得不一一删除这些垃圾代码。滥用定时器是他们最喜欢的偷懒思路。

该是什么触发就是什么触发,尽可能认真分析数据和控制流程、不要简单地想成定时。不要滥用定时器。

谢了,貌似是用了很多定时器,先去改改,希望有效

#14


我也发现这个问题,请问大哥这其中的原理是什么呢?为何会造成卡死呢?
引用 12 楼  的回复:
一定要注意,不要滥用定时器。如果是收到数据然后异步处理,这就是数据触发的,而不是什么定时器触发的。我们招聘的实习生,最喜欢用定时器,做出了无数让界面卡死的“时髦”设计,最后我们不得不一一删除这些垃圾代码。滥用定时器是他们最喜欢的偷懒思路。

该是什么触发就是什么触发,尽可能认真分析数据和控制流程、不要简单地想成定时。不要滥用定时器。

#1


会卡死,是不是出现了无限循环或者占用内存太大导致了,好好检查下。注意细节

#2


检查下不要因为定时器产生了定时递归,还有事件不要重复添加。

#3


曾经做了小软件,用来检测当前的内存使用率,运行了大概4、5个小时后,内存的使用率没有变化!我问下哈,如果我有全局变量 a,在串口中断中 对a 进行赋值,在定时器中,对a取值,这样会不会出现卡死的状态啊?

#4


定时递归是什么意思啊?

#5


估计是线程死锁。

#6


线程死锁是怎么产生的呢?

#7


可以查看CE的进程管理器,查看内存使用是不是随着时间增加而一直增加

#8


做过一个小软件 进行监视了!!软件运行了3小时后 没怎么增加

#9


新的状况:昨天卡死了,然后过去按界面,怎么按都没反应,可是过了一段时间后,再去按结果又可以按了,程序也活过来了!这个是什么情况?
如果我有全局变量 a,在串口中断中 对a 进行赋值,在定时器中,对a取值,这样会不会出现卡死的状态啊?

#10


是不是有联网操作的啊,联网操作会不会网络较慢(局域网也算)或是不通

#11


先加入log机制,进行分析。

#12


一定要注意,不要滥用定时器。如果是收到数据然后异步处理,这就是数据触发的,而不是什么定时器触发的。我们招聘的实习生,最喜欢用定时器,做出了无数让界面卡死的“时髦”设计,最后我们不得不一一删除这些垃圾代码。滥用定时器是他们最喜欢的偷懒思路。

该是什么触发就是什么触发,尽可能认真分析数据和控制流程、不要简单地想成定时。不要滥用定时器。

#13


引用 12 楼 sp1234 的回复:
一定要注意,不要滥用定时器。如果是收到数据然后异步处理,这就是数据触发的,而不是什么定时器触发的。我们招聘的实习生,最喜欢用定时器,做出了无数让界面卡死的“时髦”设计,最后我们不得不一一删除这些垃圾代码。滥用定时器是他们最喜欢的偷懒思路。

该是什么触发就是什么触发,尽可能认真分析数据和控制流程、不要简单地想成定时。不要滥用定时器。

谢了,貌似是用了很多定时器,先去改改,希望有效

#14


我也发现这个问题,请问大哥这其中的原理是什么呢?为何会造成卡死呢?
引用 12 楼  的回复:
一定要注意,不要滥用定时器。如果是收到数据然后异步处理,这就是数据触发的,而不是什么定时器触发的。我们招聘的实习生,最喜欢用定时器,做出了无数让界面卡死的“时髦”设计,最后我们不得不一一删除这些垃圾代码。滥用定时器是他们最喜欢的偷懒思路。

该是什么触发就是什么触发,尽可能认真分析数据和控制流程、不要简单地想成定时。不要滥用定时器。