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+" 执行完毕!";
}
}
查看全文
相关阅读:
python中True,False,数值之间用<,>,==进行比较规则
分析python代码性能的程序分析包cProfile
/bin/bash^M: bad interpreter: No such file or directory问题
架构图以及vue的简介
重写简易的confirm函数
CSS绝对定位元素居中的几种方法
Linux 部署java web 项目,验证码图片不显示文字问题
log4j升级到log4j2
openssh一键升级脚本(只升级openssh,其它已有环境不变,解决root登录问题)
openssh一键升级脚本(测试成功)
原文地址:https://www.cnblogs.com/yesun/p/356841.html
最新文章
K8S(09)交付实战-通过流水线构建dubbo服务
K8S(08)交付实战-交付jenkins到k8s集群
K8S(07)交付实战-架构说明并准备zk集群
将博客搬至CSDN
三、微服务的拆分与编写
Spring Cloud Alibaba微服务从入门到进阶 持续更新中
一、Spring Cloud Alibaba简介
二、Spring Boot基础
Ribbon负载均衡
Eureka服务注册与发现
热门文章
本地镜像发布到阿里云
Docker安装mysql
DockerFile 自定义镜像Tomcat9
将mkv视频转换为mp4
Windows时间与黑苹果时间不一致问题
Django中间件middleware的使用
python: hassttr/getattr/setattr方法使用
闭包函数延迟绑定问题
python获取函数名方法
嵌套循环(递归函数)求任意字符串字符排列组合
Copyright © 2011-2022 走看看