写了个发短信的程序,放在服务器上,分了两个线程A,BA 用来扫描数据库 发现有待发送的信息 ,就发送B 用了接收短信刚启动的时候,没问题 可是多了 大概三天左右 就不能发送了因为时间太久,没办法调试出是什么问题 还麻烦各位帮忙想想 是什么问题
解决方案 »
- 关于数据嵌套显示的问题?
- 关于子窗体(继承窗体)的一个奇怪的问题
- NameObjectCollectionBase这个怎么做?
- 未处理 System.Resources.MissingManifestResourceException
- 能否判断鼠标,是单击还是拖动
- 请问一个小问题!做水晶报表的时发现工具一栏里的-字段管理器不见了!
- 怎么样更改MessageBox上按扭的文字,
- 计算星期六,星期日,在线等待
- C#作的window服务程序,安装时为什么提示用户名及密码(在现,根据答案立即解决,立即结贴)
- 没有c++和java基础怎样开始学习c#那
- 在WPF中如何隐藏控件以及如何在另外类中设置label的值?
- C# 怎么抛出多个异常?
忘记贴代码了 //感觉这里的线程应该单例的 懒
threadSendSms = new Thread(new ThreadStart(synchronizationData)); //使用线程执行方法
//OnNumberClear += new EventHandler(ThreadDemo_OnNumberClear);
threadSendSms.Start(); //启动线程 //接收短信
threadReciveSms = new Thread(new ThreadStart(reciveSms));
threadReciveSms.Start();
private void synchronizationData()
{
//socket = 1;
if (socket > 0)
{
while (true)
{
DateTime startTime = DateTime.Parse("07:30");
DateTime endTime = DateTime.Parse("22:30");
DateTime nowTime = DateTime.Now;
if (nowTime > startTime && nowTime < endTime)
{
//查询未发送的并且是没有取消发送的 发送者未删除 待发短信未删除
List<RuiHuaOA.Model.Sendsms> list = sendsms.getInfoReadyToSend(null);
#region 循环发送
}
//Update.updateInfo(list);
}
}
else
{
}
}
另外,把下面两行代码提到while外面,不需要每次都转换
DateTime startTime = DateTime.Parse("07:30");
DateTime endTime = DateTime.Parse("22:30");再另外,在while里加一条System.Threading.Thread.Sleep(1);
try catch
谢谢你的回答 不过你能解释一下为什么要加上 System.Threading.Thread.Sleep(1); 吗
2)可能是线程阻塞了,如果你的服务器上装有VS可调试,尝试这样处理:调试模式下,程序一启动就新开一个线程,做简单的While+Sleep.
在程序运行中这个线程会一直在运行.
几天之后,如果发现你的程序挂起,在Sleep处设置断点,
当断点停住时,通过VS的查看当前线程功能(Debug->Windows->Threads),
可以看到到底是哪个线程挂起,或者说具体执行到哪一步挂起.你可以尝试一下.
自动运行的无人值守程序,往往对稳定性要求比较高,你要充分的考虑到网络异常、数据库异常、甚至机器DOWN机等异常时怎么办。
为了保证线程不会崩溃,往往在线程方法里存在两个try,第一个是线程方法的第一行到线程方法的最后一行,第二个在线程循环内的第一行到循环体的最后一行。
出来异常一定要把异常堆栈(不是message)记录下来
另外还需要在应用程序级和应用程序域级加入异常捕获(记不清楚了,好似是Application.ThreadException和AppDomain.UnhandledException,自己查查吧!),这两个捕获是为了捕获我们程序当中未处理或忘记处理的异常的。
if (socket > 0)这个条件是不是应该放到while里面?
查询你的程序运行日志,看看是哪儿报错了。运行到何处停止了。最好把你的vs调试3天看看。