标题:关于多线程技术,麻烦高手指教!
只看楼主
hmqr
Rank: 2
等 级:论坛游民
帖 子:26
专家分:15
注 册:2010-3-2
结帖率:100%
 问题点数:0 回复次数:3 
关于多线程技术,麻烦高手指教!
我写的程序主要是以下功能:

     获取某FTP服务器下某一目录的规定条件的文件,假设有10个符合要求,需要下载,那么我下载数据的过程在一个单独的类中完成,这个类叫做downone,它包含了一些下载文件所需的文件地址、用户名、密码等信息,还包含一个方法叫makeDown(),它实现具体的下载功能;

    在主程序中我使用以下方法进行线程启动:

      Thread[] myth = new Thread[downFiles.Count];  \\设置线程变量数组用于后期监视,downFiles.Count为需要下载的文件数量;
                List<downone> downOneList = new List<downone>();
                for (int i = 0; i < myth.Length;i++ )    //对每个筛选完成后的文件进行下载
                {
                    Uri downUri = new Uri(serveUri, downFiles[i]);
                    downone mydown = new downone(downUri,downFiles[i],singleSite[2],singleSite[3],singleSite[9]);   \\构造函数,为downone类赋初值
                    downOneList.Add(mydown);
                    myth[i] = new Thread(new ThreadStart(mydown.makeDown)); \\启动线程
                    myth[i].Start();
                }

以上代码启动了10个线程(如果有10个文件),同时到该FTP站点下载不同的文件,但问题是我发现基本上只有两个文件同时下载,也就是说同一时间只有两个线程在工作,其他线程好像在队列中,为什么不是10个文件一起下载呢,麻烦指教!
搜索更多相关主题的帖子: 线程 技术 麻烦 指教 
2010-07-21 11:26
hainandgm
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:111
专家分:475
注 册:2007-6-21
得分:0 
在myth[i].Start();之后换行加入主线程阻塞时间,好让子线程正常启动,比如:Thread.Sleep(10);
你试试看
2010-07-24 14:49
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
得分:0 
Thread在执行通一个线程函数时,确实有这种BUG,而且即使使用线程池依然无法解决这个问题。
如果想要规避这个BUG,建议你把mydown.makeDown改到主程序类中实现,并且使用诸如DownOne1,DownOne2....这样,线程的数量与函数的数量相同,就可以绕过这个BUG了。
但问题就是线程的数量就必须是指定的数量了。

2010-07-26 13:58
hmqr
Rank: 2
等 级:论坛游民
帖 子:26
专家分:15
注 册:2010-3-2
得分:0 
多谢指导!
2010-07-29 13:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-313591-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.241004 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved