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的内部原理

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...