- 博客(1)
- 资源 (12)
- 收藏
- 关注
多线程计数,怎么保持计数准确
首先使用设计模式中的单件模式,防止多次初始化对象,造成访问空间的不一致。
计数处要加lock,将其他线程计数暂时阻塞,保证计数的正确性。
如果要想实时计数实时输出,可以将计数和输出处一并lock处理,不然不同线程的计数和输出结果未必按顺序处理,
如此加锁能保证按顺序处理按顺序输出,不过这样多少都 损失了一些性能
代码中加锁位置很重要
此程序会增加三次运算,原因是本线程未到200次,但是必然会有一个线程第一次增加所以在add里再做判断
http://blog.csdn.net/ggbb190/article/details/18003165
2014-01-08
接口的好处与实例操作
接口的有点:
@1、规范继承制必须实现共有的方法、多继承可实现继承者实现不同功能
@2、管理者只需规范接口,把实现交给程序员即可完成整体统一
介绍参考http://blog.csdn.net/ggbb190/article/details/16114333
2013-11-14
TCPIP服务器连接组件,快速开发高性能TCP服务器(C/S),socket异步连接并发高
简单几部就可以开发出高性能的C/S模式tcp服务器
演示源码里有数据报文重载势力,可以根据实际需求进行
不同数据格式的开发。
已经基于这个开发多个物联网相关实际应用
启动部分代码
//新建服务TcpSvr
svr = new TcpSvr(6000, 50, new Coder(Coder.EncodingMothord.Unicode));
this.SetText("创建tcp服务成功,端口:6000"+" 最大连接数:50" +"\r\n");
//定义服务器的4个事件
//服务器满
svr.ServerFull += new NetEvent(ServerFull);
//新客户端连接
svr.ClientConn += new NetEvent(ClientConn);
//客户端关闭
svr.ClientClose += new NetEvent(ClientClose);
//接收到数据
svr.RecvData += new NetEvent(RecvData);
this.SetText("创建四个事件(服务器满、新客户端连接、客户端关闭、接收到数据)成功服务成功\r\n");
//添加报文拆包
svr.Resovlver = new MyDatagramResolver();
this.SetText("创建报文分析器成功\r\n");
svr.Start();
this.SetText("服务开启成功!!!\r\n");
2011-03-22
电力负控终端数据测试软件v1.0-负控抄表
本软件是作为负控系统协议测试软件
附带功能码分析文档(仅供参考)
当终端发送各种数据,本软件能够有效地接收并记录
包括时间、数据包、功能码等信息
例:
127.0.0.1:4510 10-10-17 18:54:49 发送:确认/否认数据
127.0.0.1:4510 10-10-17 18:54:49收到 链路接口检测 登录成功 操作成功
登录/心跳时间更新成功!
收到 链路接口检测接收数据写入数据库成功!
10-10-17 18:54:49127.0.0.1:4510 数据: 10-10-17 18:54:49 正确:数据检验通过确
recv data:683100310068D111220100030270000001007B16 from:Session:948,IP:127.0.0.1:4510.有新客户端接入:127.0.0.1:4510 10-10-17 18:54:47
6000端口监听中,服务已开启。。。。。。
兼容:
负载控制传输规约2004.pdf
QGDW130-2005_电力负荷管理系统数据传输规约
程序未打包,可能会需要安装
.NET Framework 2.0
(版本 2.0.50727.42)
2010-10-17
异步调用04-执行回调方法-C#
如果启动异步调用的线程是不需要处理结果的线程,则可以在调用完成时执行回调方法。回调方法在线程池线程上执行。
若要使用回调方法,必须将引用回调方法的AsyncCallback委托传递给BeginInvoke。也可以传递包含回调方法将要使用的信息的对象。例如,可以传递启动调用时曾使用的委托,以便回调方法能够调用EndInvoke方法。
下面的代码说明了如何使用这种方法来进行异步调用,并获得异步方法的结果:
2009-09-21
异步调用03-轮询异步调用是否完成-c#
可以使用由BeginInvoke方法返回的IAsyncResult的IsCompleted属性来发现异步调用何时完成。从用户界面的服务线程中进行异步调用时可以执行此操作。轮询完成允许调用线程在异步调用在线程池线程上执行时继续执行。
下面的代码说明了如何使用这种方法来进行异步调用,并获得异步方法的结果:
2009-09-21
异步调用实例02-AsyncWaitHandle-c#
可以使用BeginInvoke方法返回的IAsyncResult的AsyncWaitHandle属性来获取WaitHandle。异步调用完成时会发出WaitHandle信号,可以通过调用WaitOne方法来等待它。
如果使用WaitHandle,则在异步调用完成之前或之后,在通过调用EndInvoke检索结果之前,还可以执行其他处理。
下面的代码说明了如何使用这种方法来进行异步调用,并获得异步方法的结果:
2009-09-21
异步调用实例01-EndInvoke-c#
直接调用EndInvoke 方法等待异步调用结束
异步执行方法的最简单的方式是通过调用委托的BeginInvoke方法来开始执行方法,在主线程上执行一些工作,然后调用委托的EndInvoke方法。EndInvoke可能会阻止调用线程,因为它直到异步调用完成之后才返回。这种技术非常适合于文件或网络操作,但是由于EndInvoke会阻止它,所以不要从服务于用户界面的线程中调用它。
下面的代码说明了如何使用这种方法来进行异步调用,并获得异步方法的结果:
2009-09-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人