http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 2174|回复: 7

[其他] 线程问题,请贵人帮助

[复制链接]
发表于 2013-11-24 00:42:32 | 显示全部楼层 |阅读模式
本帖最后由 hnxxd 于 2013-11-24 00:43 编辑

我模拟了20个线程,而且定时性都设定不能,然后显示一些信息,按道理,我不关闭控制台程序,它是不会停止工作的,但是不知道为何,一般运行到8、9分钟后,前面19个定时器全部没有反应了,只有最后一个线程20,还在动作,这是为何呢?(附源码)
先谢过了!
[C#] 纯文本查看 复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Transfer
{
    public class ztThreading
    {
        private string strid;
        private string strzd;
        private string strqc;
        private Int64 counter;
        public ztThreading(string text0, string text1, string text2, int number)
        {
            strid = text0;
            strzd = text1;
            strqc = text2;
            counter = number;
        }

        public void ThreadProc(Object e)
        {
            //这里加入数据抽取及去重插入新数据
            try
            {
                counter += 1;
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("线程" + strid + "," + strzd + strqc + ":执行次数:{0}", counter);
            }
            catch (System.Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("线程" + strid+"发生错误{0}",ex.ToString());
            }
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            for (int i = 1; i < 21; i++)
            {
                ztThreading s = new ztThreading(Convert.ToString(i),"字段","去重", 0);
                Timer time1 = new Timer(s.ThreadProc, s, 0, i * 1000);
            }
            while (true)
            {
                Thread.Sleep(5);
            }
        }
    }
}


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-11-24 08:15:07 | 显示全部楼层
       while (true)
            {
                Thread.Sleep(5);这个没有任何用吧,另外不建议用timer,没见过你这样写线程的,你直接搜索多线程,我写的有例子
 楼主| 发表于 2013-11-24 15:28:08 | 显示全部楼层
本帖最后由 hnxxd 于 2013-11-24 15:38 编辑
站长苏飞 发表于 2013-11-24 08:15
while (true)
            {
                Thread.Sleep(5);这个没有任何用吧,另外不建议用ti ...

你的方法和我的不一样。

[backcolor=white !important]while (true)
[backcolor=white !important]{
[backcolor=white !important]Thread.Sleep(5);
[backcolor=white !important]}
[backcolor=white !important]控制台程序不这样,一下就退出了!
[backcolor=white !important]我的目的不是只开线程的问题,我是开的线程每个执行的时间都是不同的,而且是让它们一直做下去。
[backcolor=white !important]做这个程序的目的是监控远程数据,如有更新直接插入本地。关键是远程只有读取的权限,不然的话,我做在远程数据库中写更新事件就行了。

 楼主| 发表于 2013-11-24 15:46:04 | 显示全部楼层
现在问题是,程序运行都按照我的预想运行,问题出在最后一个线程始终运行,一点问题都没有,前面几个线程,我没有设定停止的情况下,它们自动的停掉了,而且也没有出错的情况。
发表于 2013-11-24 16:01:19 | 显示全部楼层
程序肯定不是完全一样的,我只是让你看看线程是怎么用的,
你说的timer从没有这样用过,伤不起,控制台的开线程的方法也是一样的。没听说过控制台的线程要用Timer来实现的。
我以前也写过这样的,而且不比你的简单,也没有听说过有这个种情况,更没有想过会用Timer,不知道你这个想法是怎么产生的。我是感觉很奇怪。
反正我只是给你个建议,用不用,或者是原不原意去试试,是你的事。
不过我希望你做过测试再下评论。

 楼主| 发表于 2013-11-24 20:29:13 | 显示全部楼层
本帖最后由 hnxxd 于 2013-11-24 20:30 编辑

本来是想用定时器来控制的,看来定时器对控制台不是很好,后来改了一下程序,在线程里用Thread.Sleep(“时长”);加循环来重复执行解决了线程停止的问题。
发表于 2013-11-25 08:11:51 | 显示全部楼层
那估计是执行太快了,或者是开线程的速度太快了。这个
  while (true)
            {
                Thread.Sleep(5);你这句是不是放在循环里面就好了。
发表于 2013-11-25 16:11:43 | 显示全部楼层
求楼主教偶这种线程的用法
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-20 07:51

© 2014-2021

快速回复 返回顶部 返回列表