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+" 执行完毕!";
}
}
查看全文
相关阅读:
【PHP】 lumen 输出sql信息
Go学习笔记-使用MySQL数据库
PHP检测函数是否存在
Javascript边框闪烁提示
【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装
python-mysql windows diver地址
【转载】Python Flask 开发环境搭建(Windows)
【转载】agentzh 的 Nginx 教程(版本 2016.07.21)
【转载】写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程
【转载】从零开始搭建论坛(三):Flask框架简单介绍
原文地址:https://www.cnblogs.com/yesun/p/356841.html
最新文章
vue+koa+sequlize 搭建使程序员专注业务代码开发框架---使用方式和部分想法记录(三)
vue+koa+sequlize 搭建使程序员专注业务代码开发框架---环境区分及views相关配置(二)
vue+koa+sequlize 搭建使程序员专注业务代码开发框架---项目结构思考(一)
vue.set的使用和vue数据的序列化
通过登录保留状态研究一下http的响应头及session
vue项目踩坑
学习过程中的好文章集合
Dedecms去掉URL中a目录的方法
localStorage 知识点
Octotree Chrome插件离线安装
热门文章
vue 2.0 全局引入eCharts以及按需引用eCharts
iView 插件( babel-plugin-import) 按需引用
vue Cli 脚手架的搭建
为什么要使用前端 (Javascript) 模板引擎
停止冒泡
常用的css 重置样式
个人练习-jq 计算总价
【PHP】Laravel 错误"No application encryption key has been specified" 解决
【Go】指针 | new函数 | 变量的生命周期
【PHP】SIGN生成签名,参数排序拼接字符串
Copyright © 2011-2022 走看看