P2PMessageQueue的外部特征与设计理念
创始人
2024-04-26 01:21:26
0

P2PMessageQueue

确定 P2PMessageQueue 的公共接口的最佳方式是使用类。IntelliSense 将显示每个方法和每个参数的描述性帮助信息。以下几个段落将概述 P2PMessageQueue 接口。

图 1 显示该类的统一建模语言 (UML) 表示形式(以及它的两个依赖项:Message 类和 ReadWriteResult 枚举)。

 显示以下三种类型的类关系图: P2PmessageQueue 、 Message 和 ReadWriteResult

图 1. 显示以下三种类型的类关系图: P2PmessageQueue 、 Message 和 ReadWriteResult 。

如果您偏爱描述性信息较少的 Object Browser 屏幕快照(但对于某些人来说可能更为熟悉),请参见图 2。

 显示这三种类型的 Visual Studio Object Browser

图 2. 显示这三种类型的 Visual Studio Object Browser 。

请注意尚未讨论的项以及 UML 关系图中未显示的项。

添加了 DataOnQueueChanged 事件。正如您将看到的那样,在没有该事件的情况下,P2PMessageQueue 类仍然可用,但是当只读队列非空并且只写队列未满时,该增强功能将通知客户端。在内部,将阻塞等待队列句柄的线程,并在句柄收到信号时激发该事件,这就避免了错误的发生。(请参见代码以获取详细信息。)请注意,该事件不 在 UI 线程上,因此您需要使用 Control.Invoke。如果查看代码,您还将看到在调用 Close 方法时,该线程是如何完全关闭的,这正是 .NET Compact Framework 版本 1.0 的线程所需要的。.NET Compact Framework 版本 1.0 中的 Thread 类不提供 IsBackground 属性或 Abort 方法;因此,必须确保应用程序提供必需的代码来完全终止该应用程序启动的所有线程。如果不提供该代码,则运行应用程序的进程很可能无法终止,因为运行中的 .NET Compact Framework 1.0 线程会保持该进程运行,即使主应用程序线程尝试退出也是如此。

此外,如果查看该实现会发现两个受保护的虚拟方法。

  1. # void StartEventThread()  
  2. # Int32 GetBehaviourFlag()  

如果不需要启动事件线程,则可以用一个空方法重写第一个方法。不启动事件线程是一个非常规方案(因为无法直接订阅该事件),但是的确存在该选项。第二个方法返回传入到 CreateMsgQueue 方法的标志 (MSGQUEUOPTIONS.dwFlags) 中使用的整型参数。MSGQUEUE_ALLOW_BROKEN 的默认设置很不错,但是如果要更改它(例如,更改为 0 或 MSGQUEUE_NOPRECOMMIT),则重写 GetBehaviorFlag 是最好的做法。

现在您应该已经十分了解 P2PMessageQueue类的外部特征,以及为什么以这种方式设计。

【编辑推荐】

  1. 点对点消息队列函数:用于WinCE的IPC机制
  2. ASP.NET中无Cookie会话的优点与缺点
  3. 无Cookie会话的实现
  4. ASP.NET Cookie:不是问题的问题
  5. .NET框架中的XML:XmlSerializer的内部原理

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...