先上代码:

多线程实现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. mysql中更改字符集为utf8&&mysql中文输入不了问题解决

    写给TT:对不起啦!! 嗯,输入不了中文,大多数问题是mysql的字符集设置的问题,当然,别的问题也有可能, 这里我们用两种方法设置mysql的字符集,图形化工具和命令行的方式(一种操作完即可) 一, ...

  2. 「 从0到1学习微服务SpringCloud 」11 补充篇 RabbitMq实现延迟消费和延迟重试

    Mq的使用中,延迟队列是很多业务都需要用到的,最近我也是刚在项目中用到,就在跟大家讲讲吧. 何为延迟队列? 延迟队列就是进入该队列的消息会被延迟消费的队列.而一般的队列,消息一旦入队了之后就会被消费者 ...

  3. 根据指定路由生成URL |Generating a URL from a Specific Route | 在视图中生成输出URL|高级路由特性

    后面Length=5 是怎么出现的?

  4. GitHub学习之路1

    对于代码的管理以及维护上,GitHub不失为一个较为明智的选择.而对于GitHub的灵活应用也是相当重要的,以下记录为以防自己忘记. 1. 创建SSH Key ssh-keygen -t rsa –C ...

  5. Python3 正则表达式 re 模块的使用 - 学习笔记

    re 模块的引入 re 模块的使用 re.compile() re.match()与re.search() re.match re.search() 区别 re.findall()与re.findit ...

  6. 03--java--DOS编译运行输出Java,Hi!

    lalala.... 1.新建文本文档,将扩展名改成.java为后缀的文件 2.利用记事本打开.java文件,进行编写保存 3.启动dos窗口,进入到.java文件所在目录中 4.使用"ja ...

  7. python3操作MySQL的模块pymysql

    本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用. PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中 ...

  8. Nginx-Http服务器常用配置

    #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; ...

  9. Linux(Centos)安装tomcat并且部署Java Web项目

    步骤一.下载安装包 a.   下载tomcat linux安装包,地址:http://tomcat.apache.org/download-80.cgi , 我们下载的版本是8.0,下载方式如图: b ...

  10. C陷阱与缺陷学习笔记

    导读 程序是由符号(token)序列所组成的,将程序分解成符号的过程,成为"词法分析". 符号构成更大的单元--语句和声明,语法细节最终决定了语义. 词法陷阱 符号(token)指 ...