多线程 主线程挂掉的问题,万分感谢

艾米01 2013-06-19 09:30:07
我是用windows服务的形式,让此程式自动采集数据,用定时器定时。

然后在采集数据的方法中,我把需要处理的url都写入到队列,当队列元素>0的时候,就 GetSevenWth(q.Dequeue()) 以出队列的形式,写入采集方法。

线程是申请了10个,
Thread[] th = new Thread[count];
for (int i = 0; i < count; i++)
{
if (q.Count > 0)
{
th[i] = new Thread(new ThreadStart(printQueue));
th[i].IsBackground = true;
th[i].Start();
}
}
其中printQueue是:
static private void printQueue()
{
while (true)
{
if (q.Count > 0)
{
GetSevenWth(q.Dequeue()); //具体采集的方法。
}
else
{
return;
}
}
}

每次第一次执行成功,然后在次执行或者第三次timer启动执行时,此windows服务会自动停止了。 希望能帮忙找找原因,谢谢。
...全文
300 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq598235031 2013-06-19
  • 打赏
  • 举报
回复
一般是程序内部异常,从简单的代码中明显看得出,缺乏线程管理(像IO流、线程是非托管资源)。 当然,dotnet提供一个线程池,使用方便,而且自动释放。
艾米01 2013-06-19
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
那你是怎么控制timer的开启呢,难道是每次都创建10个,不停的创建 估计是出错了,记录一些运行日志,便于你查找问题
timer的开启是在Service1.cs里设置: public Service1() { InitializeComponent(); System.Timers.Timer t = new System.Timers.Timer(900000); //60000 为一分钟,此处设定为15min t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达的时候执行的事件 t.AutoReset = true; t.Enabled = true; } public void theout(object source, System.Timers.ElapsedEventArgs e) { GetWeatherInfo.MythreadRun(); //具体线程创建和采集方法执行。 }
bdmh 2013-06-19
  • 打赏
  • 举报
回复
那你是怎么控制timer的开启呢,难道是每次都创建10个,不停的创建 估计是出错了,记录一些运行日志,便于你查找问题
请叫我卷福 2013-06-19
  • 打赏
  • 举报
回复
每隔15分钟创建10个线程吗 建议你可以先检查q中是否有数据 把创建的现成进行统一管理 另外可以检查GetSevenWth(q.Dequeue()); //具体采集的方法 是否有错 增加容错机制
艾米01 2013-06-19
  • 打赏
  • 举报
回复
引用 5 楼 wzqwww 的回复:
用了SOCKET? 那得心跳下。
请教一下, 心跳,C#里面需要怎么操作呢?
wzqwww 2013-06-19
  • 打赏
  • 举报
回复
用了SOCKET? 那得心跳下。
艾米01 2013-06-19
  • 打赏
  • 举报
回复
刚刚加log测了下,有时候正常运行,有时候就会因为采集数据的HttpWebResponse、StreamReader连接超时,("远程主机强迫关闭了一个现有的连接"); 我认为是多个线程在运行时的无规律,造成连某些接超时了。 这个该怎么处理好呢?

110,533

社区成员

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

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

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