消息分发

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMsgRecord = record
    MsgID1: Integer;
    MsgID2: Integer;
    MsgName: string[15];
    MsgDesc: string[27];
  end;

  TMsgHandleClass = class
  private
    procedure SM_Message1(var MsgRec: TMsgRecord); message 2000;
    procedure SM_Message2(var MsgRec: TMsgRecord); message 2001;
    procedure SM_Message3(var MsgRec: TMsgRecord); message 2002;
  public
    procedure DefaultHandler(var Message); override;
  end;

var
  Form1: TForm1;
  MsgObject: TMsgHandleClass;

implementation

{$R *.dfm}

{ TMsgHandleClass }

procedure TMsgHandleClass.DefaultHandler(var Message);
begin
  inherited;
  ShowMessage(‘DefaultHandler: ‘);
end;

procedure TMsgHandleClass.SM_Message1(var MsgRec: TMsgRecord);
begin
  ShowMessage(‘2000‘);
end;

procedure TMsgHandleClass.SM_Message2(var MsgRec: TMsgRecord);
begin
  ShowMessage(‘2001‘);
end;

procedure TMsgHandleClass.SM_Message3(var MsgRec: TMsgRecord);
begin
  ShowMessage(‘2002‘);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyMsg: TMsgRecord;
begin
  FillChar(MyMsg, SizeOf(TMsgRecord), 0);
  MyMsg.MsgID1 := 2001;
  MyMsg.MsgID2 := 2000;
  MyMsg.MsgName := ‘2000消息‘;
  MyMsg.MsgDesc := ‘这是消息号为2000的消息‘;
  MsgObject.Dispatch(MyMsg);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MsgObject := TMsgHandleClass.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  MsgObject.Free;
  MsgObject := nil;
end;

end.

  

时间: 2024-11-14 13:05:54

消息分发的相关文章

muduo Dispatcher消息分发器 通过多态和模板进行向上类型转换

所谓消息分发(muduo 中,就是接收到buffer之后,额,或者说是 protobuf),在简单的程序设计里面的话,估计就是 type-switch 了,但是这样的话,肯定就不好扩展维护啦. 最后的方法就是,可以根据 type-name 自动去调用相应的方法. typedef boost::function<void (Message*)> ProtobufMessageCallback; 这个算是一个映射咯.muduo 中采用的是 map<Descriptor*,ProtobufMe

Cocos2d-x 3.0 屏幕触摸及消息分发机制

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 题外话: 唉. 开学了!    好烦. 这就已经大三了, 两年前的这时候,我还是懵懂的大一小学弟, 两年后.就要奔上社会就业了. 光阴似箭.日月如梭呀~ 正文: 好久没做cocos2d-x了,这次练习一下.屏幕触摸及消息分发机制. 这里,我用的是cocos2d-

Android中的观察者模式:消息分发器(MessageDispatcher)

这个功能是在公司项目需求的时候写出来,本来是基础命令字模式的,但是个人喜欢对象,所有后来在一个小项目中使用时,改成了基于对象模式. 首先,是一个接口,我们称之为监听器: [html] view plaincopyprint? /** * * @author poet * */ public interface MessageObserver<T> { void onMessage(T t); } 这里使用的是泛型,泛型<T>除了作为实际监听的对象类型,也作为监听器管理的key,届时

delphi VCL研究之消息分发机制(转)

原文来源,http://blog.csdn.net/sushengmiyan/article/details/8635550 1.VCL 概貌 先看一下VCL类图的主要分支,如图4.1所示.在图中可以看到,TObject是VCL的祖先类,这也是Object Pascal语言所规定的.但实际上,TObject以及TObject声明所在的system.pas整个单元,包括在“编译器魔法”话题中提到的_ClassCreate等函数,都是编译器内置支持的.因此,无法修改.删除system.pas中的任何

RabbitMQ消息队列(六):使用主题进行消息分发[转]

在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity(严重级别)的log.但是,这也是它之所以叫做简单日志系统的原因,因为是仅仅能够通过severity(严重级别)设定.不支持更多的标准. 比如syslog unix的日志工具,它可以通过severity (info/warn/crit...) 和模块(auth/cron/kern...).这可能更是我们想要的:我们可以仅仅需要cron模块的log. 为

RabbitMQ消息分发轮询和Message Acknowledgment

一.消息分发 RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费. 多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理. 启动3个消费者 生产者依次生成3条消息 可见3条消息分别被3个消费者获取,所以RabbitMQ是采用轮询机制将消息队列Queue中的消息依次发给不同的消费者 二.消息确认(Message Ac

netty5心跳与阻塞性业务消息分发实例

继续之前的例子(netty5心跳与业务消息分发实例),我们在NettyClientHandler把业务消息改为阻塞性的: package com.wlf.netty.nettyclient.handler; import com.wlf.netty.nettyapi.javabean.Header; import com.wlf.netty.nettyapi.javabean.NettyMessage; import io.netty.channel.ChannelHandlerAdapter;

Android正在使用Handler实现消息分发机制(两)

在开始这篇文章之前,.首先,我们在总结前两篇文章Handler, Looper和MessageQueue像一些关键点: 0)在创建线程Handler之前,你必须调用Looper.prepare(), 创建一个线程局部变量Looper,然后调用Looper.loop() 进入轮循. 1)当Handler创建之后,就能够调用Handler的sendMessageAtTime方法发送消息.而实际上是调用MessageQueue的enqueueMessage方法.将相应的消息放入消息队列. 2)每个线程

Python-RabbitMQ消息分发机制

上一篇中的例子是一个生产者对应一个消费者,那能不能一个生产者对应一个消费者呢? 下面来测试一下,顺便观察一下它的分发策略... 步骤一:先编辑生产者代码(rabbit_send.py) #top1:导入pika模块 import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) import pika #top2:建立socket connection = pika.BlockingConnection(pika.Connectio

(转)RabbitMQ消息队列(六):使用主题进行消息分发

在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因,因为是仅仅能够通过severity设定.不支持更多的标准. 比如syslog unix的日志工具,它可以通过severity (info/warn/crit...) 和模块(auth/cron/kern...).这可能更是我们想要的:我们可以仅仅需要cron模块的log. 为了实现类似的功能,我们需