winform 连续运行三天 出错

在路上20130607 2010-12-01 03:38:20
写了个发短信的程序,放在服务器上,分了两个线程A,B

A 用来扫描数据库 发现有待发送的信息 ,就发送

B 用了接收短信

刚启动的时候,没问题 可是多了 大概三天左右 就不能发送了

因为时间太久,没办法调试出是什么问题

还麻烦各位帮忙想想 是什么问题
...全文
275 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
已经添加日志·········
在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 walkghost 的回复:]

养成连接后sleep的习惯,我一般sleep15ms。
查询你的程序运行日志,看看是哪儿报错了。运行到何处停止了。最好把你的vs调试3天看看。
[/Quote]
你太会开玩笑了
估计是某个时候断网了
导致这之后的信息都不能发布了
jialine0426 2010-12-01
  • 打赏
  • 举报
回复
是子线程运行出错了,抛出到主线程,导致程序出错,一般能在计算机管理器的Event Viewer中找到一个很奇怪的错误。所以写多线程的应用程序,在最外层还要包层try catch,而且catch不写任何代码。你可以做一个实验,在你的子线程中throw 一个Exception,然后会看到弹出一个对话框,你再去看看Event Viewer,找一下有没有刚才报的类似的日志。
walkghost 2010-12-01
  • 打赏
  • 举报
回复
养成连接后sleep的习惯,我一般sleep15ms。
查询你的程序运行日志,看看是哪儿报错了。运行到何处停止了。最好把你的vs调试3天看看。
gq198718 2010-12-01
  • 打赏
  • 举报
回复
受益匪浅!
LIUMRZY 2010-12-01
  • 打赏
  • 举报
回复
没处理异常!
在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 gohappy2008 的回复:]

断网后 又重新连接上, 需要再重新启动线程。
[/Quote]

为什么要重启线程呢?
在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 zenghd 的回复:]

再加个另外,什么情况下会出现socket <= 0?
if (socket > 0)这个条件是不是应该放到while里面?
[/Quote]

好的 谢谢
gohappy2008 2010-12-01
  • 打赏
  • 举报
回复
断网后 又重新连接上, 需要再重新启动线程。
ZengHD 2010-12-01
  • 打赏
  • 举报
回复
再加个另外,什么情况下会出现socket <= 0?
if (socket > 0)这个条件是不是应该放到while里面?

在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cdglynn 的回复:]

还补充一点,就是应用程序的界面如果被多线程刷的过于频繁也会导致程序挂掉,可考虑使用缓存减少界面的刷心频率
[/Quote]

这个放心 基本没有什么界面
在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cdglynn 的回复:]

我想代码运行了三天都没出现问题,那说明逻辑是没有问题的,应该是你的代码没有对异常进行处理或没有一个好的异常处理机制和容错机制。
自动运行的无人值守程序,往往对稳定性要求比较高,你要充分的考虑到网络异常、数据库异常、甚至机器DOWN机等异常时怎么办。
为了保证线程不会崩溃,往往在线程方法里存在两个try,第一个是线程方法的第一行到线程方法的最后一行,第二个在线程循环内的第一行到循环体的最后一行……
[/Quote]

是啊 三天内 有断网的情况 就连不上短信机了

谢谢 恍然大悟

也谢谢楼上的各位

我再写个 试试看
reggiekiller 2010-12-01
  • 打赏
  • 举报
回复
日志日志
cdglynn 2010-12-01
  • 打赏
  • 举报
回复
还补充一点,就是应用程序的界面如果被多线程刷的过于频繁也会导致程序挂掉,可考虑使用缓存减少界面的刷心频率
在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bloodish 的回复:]

1)加日志,记录运行状态
2)可能是线程阻塞了,如果你的服务器上装有VS可调试,尝试这样处理:

调试模式下,程序一启动就新开一个线程,做简单的While+Sleep.
在程序运行中这个线程会一直在运行.
几天之后,如果发现你的程序挂起,在Sleep处设置断点,
当断点停住时,通过VS的查看当前线程功能(Debug->Windows->Threads),
可以看到到底是哪个线程挂起……
[/Quote]

牛人 但是人家的服务器 不让我这么做
cdglynn 2010-12-01
  • 打赏
  • 举报
回复
我想代码运行了三天都没出现问题,那说明逻辑是没有问题的,应该是你的代码没有对异常进行处理或没有一个好的异常处理机制和容错机制。
自动运行的无人值守程序,往往对稳定性要求比较高,你要充分的考虑到网络异常、数据库异常、甚至机器DOWN机等异常时怎么办。
为了保证线程不会崩溃,往往在线程方法里存在两个try,第一个是线程方法的第一行到线程方法的最后一行,第二个在线程循环内的第一行到循环体的最后一行。
出来异常一定要把异常堆栈(不是message)记录下来
另外还需要在应用程序级和应用程序域级加入异常捕获(记不清楚了,好似是Application.ThreadException和AppDomain.UnhandledException,自己查查吧!),这两个捕获是为了捕获我们程序当中未处理或忘记处理的异常的。
bloodish 2010-12-01
  • 打赏
  • 举报
回复
1)加日志,记录运行状态
2)可能是线程阻塞了,如果你的服务器上装有VS可调试,尝试这样处理:

调试模式下,程序一启动就新开一个线程,做简单的While+Sleep.
在程序运行中这个线程会一直在运行.
几天之后,如果发现你的程序挂起,在Sleep处设置断点,
当断点停住时,通过VS的查看当前线程功能(Debug->Windows->Threads),
可以看到到底是哪个线程挂起,或者说具体执行到哪一步挂起.

你可以尝试一下.
在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ymk 的回复:]

用哪个短信提供商,可能就是它的问题。还是通过硬件实现?
[/Quote]

用的是神州数码的短信机

应该不会是硬件的问题
因为程序重启一下 就能发送了
ymk 2010-12-01
  • 打赏
  • 举报
回复
用哪个短信提供商,可能就是它的问题。还是通过硬件实现?
在路上20130607 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyq11 的回复:]

看看资源消耗情况,记录操作日志
try catch
[/Quote]

看看资源消耗 这句话是什么意思
不好意思 我不太明白
我看过服务器的内存占用情况

三天的基本没变化
加载更多回复(9)

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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