zoukankan
html css js c++ java
今天写信息采集小程序时实现程序中同时只允许5个线程运行
/**/
/*
************************************
* CopyRight (c) edzh.com
* Date --> 2006-1-25
* Coder --> yesun
************************************
*/
using
System;
using
System.Drawing;
using
System.Collections;
using
System.ComponentModel;
using
System.Windows.Forms;
using
System.Data;
using
System.IO;
using
System.Net;
using
System.Text.RegularExpressions;
using
System.Web;
using
System.Threading;
using
System.Xml;
namespace
TestThread
{
/**/
///
<summary>
///
Form1 的摘要说明。
///
</summary>
public
class
Form1 : System.Windows.Forms.Form
{
//
多线程,只允许5个线程同时进行
public
static
int
maxThreadCount
=
4
;
public
static
int
currentThreadCount
=
0
;
public
static
int
intCurrentThread
=
0
;
public
Thread[] thread
=
new
Thread[
100
];
//
20s判断一次当前线程数
private
System.Timers.Timer runable_Timer
=
new
System.Timers.Timer(
20
*
1000
);
/**/
///
<summary>
///
必需的设计器变量。
///
</summary>
private
System.ComponentModel.Container components
=
null
;
public
Form1()
{
//
//
Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
//
TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/**/
///
<summary>
///
清理所有正在使用的资源。
///
</summary>
protected
override
void
Dispose(
bool
disposing )
{
if
( disposing )
{
if
(components
!=
null
)
{
components.Dispose();
}
}
base
.Dispose( disposing );
}
Windows 窗体设计器生成的代码
#region
Windows 窗体设计器生成的代码
/**/
///
<summary>
///
设计器支持所需的方法 - 不要使用代码编辑器修改
///
此方法的内容。
///
</summary>
private
void
InitializeComponent()
{
}
#endregion
/**/
///
<summary>
///
应用程序的主入口点。
///
</summary>
[STAThread]
static
void
Main()
{
Application.Run(
new
Form1());
}
/**/
///
<summary>
///
开始抓取
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
btnStrat_Click(
object
sender, System.EventArgs e)
{
//
正在初始化线程
for
(
int
i
=
1
;i
<=
100
;i
++
)
{
GetArticle ga
=
new
GetArticle();
//
传入相关参数
ga.url
=
txtUrl.Text.Replace(
"
@pageid
"
,i.ToString());
//
把线程加入到数组中。。
Thread th
=
new
Thread(
new
ThreadStart(ga.strat));
thread[tempInt
++
]
=
th;
}
//
"共"+tempInt+"个线程保存队列中,正在启动线程,请稍候
";
//
声明委托
runable_Timer.Elapsed
+=
new
System.Timers.ElapsedEventHandler(timer_CheckThread);
runable_Timer.Start();
}
void
timer_CheckThread(
object
sender, System.Timers.ElapsedEventArgs e)
{
System.Timers.Timer initTimer
=
(System.Timers.Timer)sender;
initTimer.Stop();
//
判断当前线程数,如果不足5个,则Join新的线程
if
(currentThreadCount
<
maxThreadCount)
{
//
表示当前线程可以加入线程,使得总执行线程为5个
try
{
if
(intCurrentThread
<=
100
&&
thread[intCurrentThread]
!=
null
&&
thread[intCurrentThread].ThreadState
==
ThreadState.Unstarted)
{
thread[intCurrentThread].Priority
=
ThreadPriority.Lowest;
currentThreadCount
++
;
thread[intCurrentThread].Name
=
"
线程#
"
+
(intCurrentThread
+
1
);
//
this.errorMsg.Text = thread[intCurrentThread].Name+"已开始执行
";
thread[intCurrentThread].Start();
//
当前线程数+1
intCurrentThread
++
;
}
}
catch
{
}
}
initTimer.Interval
=
3
*
1000
;
initTimer.Start();
}
}
/**/
///
<summary>
///
抓取文章类
///
</summary>
public
class
GetArticle
{
/**/
///
<summary>
///
开始抓取数据
///
</summary>
///
<param name="url">
网址
</param>
///
<param name="reg">
正则表达式
</param>
///
<returns></returns>
public
void
strat()
{
//
Do Something。。。
//
执行完毕,减小当前线程数
//
this.parentForm.currentThreadCount--;
Form1.currentThreadCount
--
;
//
this.parentForm.errorMsg.Text = Thread.CurrentThread.Name+" 执行完毕!";
}
}
查看全文
相关阅读:
Flex4之关于Embed外部资源的使用方法总结
Flex tree的开发 后台数据连接
Flex4之Tree开发
Flex自定义组件开发
解决AS3请求数据的“安全沙箱冲突”问题
purMVC代码备份
译:如何配置Red5应用程序
关于RED5——配置文件详解
关于socket使用Amf直接进行对象传输的
垃圾回收机制
原文地址:https://www.cnblogs.com/yesun/p/356841.html
最新文章
Fraction to Recurring Decimal
字符串库函数总结
各种排序算法总结
zoj 3714 Java Beans
zoj 3713 In 7-bit
zoj 3708 Density of Power Network
zoj 1539 Lot
zoj 3622 Magic Number
zoj 3706 Break Standard Weight
zoj 3171 The Hidden 7's
热门文章
【译】NSURLRequest的官方文档
iOS开发之iPhone通过get和post方式请求asp.net webservice
IOS 实现自定义的导航栏背景以及自定义颜色的状态栏(支持7.0以及低版本)
IOS之通信加密
iOS开发之Xcode6之后不再自动创建Pch预编译文件
ios开发 <AppName>-Prefix.pch文件的用法详解
ios中retain,assign,copy的使用
IOS XML数据的解析
Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage
最新版SDWebImage的使用
Copyright © 2011-2022 走看看