先上代码:

多线程实现ping校验:

public void PingCameraNew(List<CameraMongoDto> assetlist)
{
ThreadPool.SetMaxThreads(200, 200);
for (int a = 0, b = assetlist.Count; a < b; a++)
{
CameraMongoDto asset = assetlist[a];
bool poolkai = ThreadPool.QueueUserWorkItem(new WaitCallback(DoWorkNew), asset);
}

}

多线程执行的方法:

public void DoWorkNew(object asset)
{
try
{

CameraMongoDto cameraMongo = (CameraMongoDto)asset;
System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingOptions options = new System.Net.NetworkInformation.PingOptions();
options.DontFragment = true;
string data = "Test Data!";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 250; // Timeout 时间,单位:毫秒
int flag = 0;
for (int i = 0, j = 10; i < j; i++)
{
System.Net.NetworkInformation.PingReply reply = p.Send(cameraMongo.IP, timeout, buffer, options);
if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)
{
flag = flag + 1;
}
}
cameraMongo.LosePacket = (10 - flag) * 10;
if (flag == 0)
{
cameraMongo.IsUsed = 1;
cameraMongo.AlarmLevel = (int)AlarmLevel.紧急;
}
else
{
cameraMongo.IsUsed = 0;
cameraMongo.AlarmLevel = (int)AlarmLevel.正常;
}
SingletonOff.Instance.Add(cameraMongo);
Lind.DDD.Logger.LoggerFactory.Instance.Logger_Debug(" --offnum:" + AlarmCount.Instance.offnum + "列表长度" + SingletonOff.Instance.Count);
if (SingletonOff.Instance.Count >= AlarmCount.Instance.offnum)
{
if (SingletonOff.Instance.Count > 0)
{
if (PingUpdata.Instance.Isused)
{
PingUpdata.Instance.Isused = false;
if (mongohelperc.CameraMongoUpList(SingletonOff.Instance))
{
AlarmHandingCameList(SingletonOff.Instance);
PingUpdata.Instance.Isused = true;
SingletonOff.Instance.Clear();
AlarmCount.Instance.offnum = 0;
}
}

}
}
}
catch (Exception ex)
{
Lind.DDD.Logger.LoggerFactory.Instance.Logger_Debug("线程执行失败!" + ex.Message + "trace:" + ex.StackTrace);
}

}

方法中没ping完一个设备,要把ping的结果存入单例的列表中,当单例的列表数大于等于需要ping的总数的时候,用一个方法把ping的结果存入数据库中,换句话说,是用列表的长度来衡量此次集体ping的所有线程是否完成。

ping的时候每一个设备循环ping十次的原因是需要保证ping的准确性,也可以把这十次ping的结果来做设备的丢包率。

.net代码实现上千次ping的实现的更多相关文章

  1. 月下载量上千次的APP源码分享

    在360上面上线了一个月,下载量上千余次.这里把代码都分享出来,供大家学习哈!还包括教大家如何接入广告,赚点小钱花花,喜欢的帮忙顶一个,大神见了勿喷,小学僧刚学Android没多久. 首先介绍这款应用 ...

  2. 从Google Play下载应用并不安全,上千款监视软件伪装其中

    如果你认为在官方应用市场里下载app就觉得安全的话,小编可以负责任的回答你:"too young too simple,sometimes native" 今年4月,BankBot ...

  3. Bug预防体系(上千bug分析后总结的最佳实践)

    Bug预防体系(上千bug分析后总结的最佳实践) 原创 2017-08-16俞美玲 光荣之路 吴老的<selenium webdriver 实战宝典>出版了!  web常见产品问题及预防 ...

  4. 为什么Goroutine能有上百万个,Java线程却只能有上千个?

      作者|Russell Cohen   译者|张卫滨   本文通过 Java 和 Golang 在底层原理上的差异,分析了 Java 为什么只能创建数千个线程,而 Golang 可以有数百万的 Go ...

  5. qt的应用层主要是大型3d,vr,管理软件和器械嵌入软件(有上千个下一代软件黑科技项目是qt的,美国宇航局,欧洲宇航局,超级战舰DDG1000)

    作者:Nebula.Trek链接:https://www.zhihu.com/question/24316868/answer/118944490来源:知乎著作权归作者所有.商业转载请联系作者获得授权 ...

  6. 如何用Flink把数据sink到kafka多个(成百上千)topic中

    需求与场景 上游某业务数据量特别大,进入到kafka一个topic中(当然了这个topic的partition数必然多,有人肯定疑问为什么非要把如此庞大的数据写入到1个topic里,历史留下的问题,现 ...

  7. 如何用Flink把数据sink到kafka多个不同(成百上千)topic中

    需求与场景 上游某业务数据量特别大,进入到kafka一个topic中(当然了这个topic的partition数必然多,有人肯定疑问为什么非要把如此庞大的数据写入到1个topic里,历史留下的问题,现 ...

  8. vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件

    vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源 ...

  9. SEO如何利用百度知道日引流上千IP

    个人小站长.SEO们经常为网站没有流量而发愁,一个没有流量的网站就像一个不喝水的人,迟早得死.没有流量,就没有PV,也就是说你的网站只是 给你一个人看的,那做站有什么意义呢?网站上所发布的内容都是分享 ...

随机推荐

  1. nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.报错解决

    近期在学springboot,学的时候遇到这个错,网上查了好多,改了不行,后来发现自己的配置类没有加@SpringBootApplication注解 Exception encountered dur ...

  2. xlwings excel(三)

    App相当于Excel程序,Book相当于工作簿.N个Excel程序则由apps表示,N个工作簿由books表示. 对工作簿的操作 #导入xlwings模块 import xlwings as xw ...

  3. python 抓一下 循环的访问也可以

    #!/usr/bin/python # -*- coding: utf-8 -*- #encoding=utf-8 #Filename:urllib2-header.py import urllib2 ...

  4. 【模板】普通平衡树(权值splay)

    安利splay讲解: [洛谷日报第62期]Splay简易教程 [模板]普通平衡树(luogu) Description 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下 ...

  5. laravel路由与控制器(资源路由restful)

    目前我们大致了解了laravel下,在开始一个Http程序需要先定义路由.之前的例子中,我们的业务逻辑都是在路由里实现,这对于简单的网站或web应用没什么问题,当我们需要扩大规模,程序变得复杂,分层的 ...

  6. Linux学习笔记-Centos7搭建owncloud私有云盘

    使用环境:虚拟机centos7 1.下载安装LAMP相关软件 [root@localhost yum.repos.d]# yum install httpd –y [root@localhost yu ...

  7. Nodejs实战系列:数据加密与crypto模块

    博客地址:<NodeJS模块研究 - crypto> Github :https://github.com/dongyuanxin/blog nodejs 中的 crypto 模块提供了各 ...

  8. python 利用selenium爬取百度文库的word文章

    今天学习如何使用selenium库来爬取百度文库里面的收费的word文档 from selenium import webdriver from selenium.webdriver.common.k ...

  9. 使用alpine制作最小化的JDK基础镜像

    注意:这里使用的是oracle的JRE,版本是1.8. 1.解压jre包,删除根目录下文本文件,然后删除其他不必要文件. #解压 tar xvcf jre-8u161-linux-x64.tar.gz ...

  10. Spring基础(二)_面向切面(AOP)

    面向切面编程 面向切面编程[AOP,Aspect Oriented Programming]:通过预编译方式和运行期间动态代理实现程序功能的统一维护的技术.AOP 是 Spring 框架中的一个重要内 ...