子
子陵
Unregistered / Unconfirmed
GUEST, unregistred user!
书里说:
"事件是串行的,每一个事件的处理都要等到前一个事件处理
完毕之后。当应用程序正在执行事件处理代码时(也就是说,当它没有处于等待事件状态
时),该应用程序的其他事件必须在该程序的消息队列中等待(除非应用程序使用多线程
处理,每个线程都有自己的消息队列)。[/red]当应用程序响应一条消息之后,返回等待
状态时,它将变成程序列表中的最后一位,等待着处理其他消息。在16位的WINDOWS中,
不能中断正在执行复杂事件处理程序的应用程序,其他应用程序必须等待。”
但是,如果在消息处理过程种如果有窗口产生或是连续发送同样的消息,
那么消息是怎样的呢?
谁能帮我解释一下,谢谢!
下面的源码就涉及到这个问题,自定义一个消息,在消息中showmessage,
在计时器中连续发送这个消息,为什么每个消息都被处理.而每个消息都没有被完全处理.
(也就是程序中为什么会有多个Message对话框出现,第一个消息并没有处理完)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
const
SX_MSG=WM_USER+1;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
procedure SXMsg(var msg:TMessage); message SX_MSG;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=True;
end;
procedure TForm1.SXMsg(var msg: TMessage);
begin
ShowMessage('TEST');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
PostMessage(Form1.Handle,SX_MSG,0,0);
end;
end.
"事件是串行的,每一个事件的处理都要等到前一个事件处理
完毕之后。当应用程序正在执行事件处理代码时(也就是说,当它没有处于等待事件状态
时),该应用程序的其他事件必须在该程序的消息队列中等待(除非应用程序使用多线程
处理,每个线程都有自己的消息队列)。[/red]当应用程序响应一条消息之后,返回等待
状态时,它将变成程序列表中的最后一位,等待着处理其他消息。在16位的WINDOWS中,
不能中断正在执行复杂事件处理程序的应用程序,其他应用程序必须等待。”
但是,如果在消息处理过程种如果有窗口产生或是连续发送同样的消息,
那么消息是怎样的呢?
谁能帮我解释一下,谢谢!
下面的源码就涉及到这个问题,自定义一个消息,在消息中showmessage,
在计时器中连续发送这个消息,为什么每个消息都被处理.而每个消息都没有被完全处理.
(也就是程序中为什么会有多个Message对话框出现,第一个消息并没有处理完)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
const
SX_MSG=WM_USER+1;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
procedure SXMsg(var msg:TMessage); message SX_MSG;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=True;
end;
procedure TForm1.SXMsg(var msg: TMessage);
begin
ShowMessage('TEST');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
PostMessage(Form1.Handle,SX_MSG,0,0);
end;
end.