110,539
社区成员
发帖
与我相关
我的任务
分享
using System.Linq;
我以前强调过,一些人把线程说得很时髦,但是却又非常奇怪、非常繁冗和效率低下的复杂程序格式,造成了初学者根本不会书写并发多线程计算程序。那种东西还是知道得越少越好。
如果需要使用到什么Thread之类的,那是需要你去设计比较高级一些的应用程序的时候(例如需要在 t_jl0020_pst_no 表所标记的 ip 中只找到 Ping 响应最快的3条记录,而不需要等待所有结果返回)。否则,如果是这样简单的程序编写工作,那么我建议程序员不要去过多揪扯什么底层的东西,先把 PLinq 基本语法学会比什么理论都强。public static bool PingIP(string ip, int id)
{
Ping pingSender = new Ping();
//PingReply reply =
PingReply reply = pingSender.Send(ip, 120);
if (reply.Status == IPStatus.Success)
{
//ping的通
string upIp = "UPDATE t_jl0020_pst_no set ping_ok='N' where id_num=@id_num";
SqlParameter[] par = new SqlParameter[]
{
new SqlParameter("@id_num",id)
};
SQLHelper.Update(upIp, par);
return true;
}
else
{
//ping不通
string upIp = "UPDATE t_jl0020_pst_no set ping_ok='N' where id_num=@id_num";
SqlParameter[] par = new SqlParameter[]
{
new SqlParameter("@id_num",id)
};
SQLHelper.Update(upIp, par);
return false;
}
}
}
然后统计函数返回值DataTable dt = SQLHelper.SelectTable("select id_num,com_ip from t_jl0020_pst_no");
var result = (from row in dt.Rows.Cast<DataRow>().AsParallel()
let ip = (string)row["com_ip"]
let id = int.Parse((string)row["_id_num"])
select new { ip, id, result = PingIP(ip, id) }).ToList();
这样就知道数据库表中都有哪些ip、id,以及并发(AsParallel)计算结果。
private void ZXGC_Load(object sender, EventArgs e)
{
SelectIP();
int line_count = lm.Count;
Thread[] line_PING = new Thread[line_count];
foreach (IPModel ipm in lm)
{
for (int i = 0; i < line_count; i++)
{
line_PING[i] = new Thread(delegate() { PingIP(ipm.ipAd, ipm.id); });
line_PING[i].Start();
MessageBox.Show("线程"+i+"正在执行!");
}
}
}
/// <summary>
/// pingIP地址
/// </summary>
public void PingIP(string ip, int id)
{
while (lm.Count > 0)
{
lock (lm)
{
Ping pingSender = new Ping();
//PingReply reply =
PingReply reply = pingSender.Send(ip, 10);
if (reply.Status == IPStatus.Success)
{
//ping的通
// MessageBox.Show("OK");
string upIp = "UPDATE t_jl0020_pst_no set ping_ok='Y' where id_num=@id_num";
SqlParameter[] par = new SqlParameter[]
{
new SqlParameter("@id_num",id)
};
SQLHelper.Update(upIp, par);
}
else
{
//ping不通
// MessageBox.Show("No!");
string upIp = "UPDATE t_jl0020_pst_no set ping_ok='N' where id_num=@id_num";
SqlParameter[] par = new SqlParameter[]
{
new SqlParameter("@id_num",id)
};
SQLHelper.Update(upIp, par);
}
}
}
}
/// <summary>
/// 获取车间所有测试机的IP地址
/// </summary>
public void SelectIP()
{
DataTable dt = SQLHelper.SelectTable("select id_num,com_ip from t_jl0020_pst_no");
for (int i = 0; i < dt.Rows.Count; i++)
{
IPModel im = new IPModel();
im.id = Convert.ToInt32(dt.Rows[i][0].ToString());
im.ipAd = dt.Rows[i][1].ToString();
lm.Add(im);
}
}
就修改了3条数据
public void PingIP(string ip,int id)
{
Ping pingSender = new Ping();
//PingReply reply =
PingReply reply = pingSender.Send(ip, 120);
if (reply.Status == IPStatus.Success)
{
//ping的通
string upIp = "UPDATE t_jl0020_pst_no set ping_ok='N' where id_num=@id_num";
SqlParameter[] par = new SqlParameter[]
{
new SqlParameter("@id_num",id)
};
SQLHelper.Update(upIp, par);
}
else
{
//ping不通
string upIp = "UPDATE t_jl0020_pst_no set ping_ok='N' where id_num=@id_num";
SqlParameter[] par = new SqlParameter[]
{
new SqlParameter("@id_num",id)
};
SQLHelper.Update(upIp, par);
}
}
private void ZXGC_Load(object sender, EventArgs e)
{
SelectIP();
int line_count = lm.Count;
Thread[] line_PING = new Thread[line_count];
foreach (IPModel ipm in lm)
{
for (int i = 0; i < line_count; i++)
{
line_PING[i] = new Thread(delegate(){ PingIP(ipm.ipAd,ipm.id);});
line_PING[i].Start(i);
}
}
}
public void SelectIP()
{
DataTable dt = SQLHelper.SelectTable("select id_num,com_ip from t_jl0020_pst_no");
for (int i = 0; i < dt.Rows.Count; i++)
{
IPModel im = new IPModel();
im.id = Convert.ToInt32(dt.Rows[i][0].ToString());
im.ipAd = dt.Rows[i][1].ToString();
lm.Add(im);
}
}
public void SelectIP()
{
DataTable dt = SQLHelper.SelectTable("select id_num,com_ip from t_jl0020_pst_no");
for (int i = 0; i < dt.Rows.Count; i++)
{
IPModel im = new IPModel();
im.id = Convert.ToInt32(dt.Rows[i][0].ToString());
im.ipAd = dt.Rows[i][1].ToString();
lm.Add(im);
}
}
求修改