; time: DWORD; pt: TPoint; end;
二、Delphi的消息处理
三、发送消息
下列两个Windows API函数均可实现消息的发送 。 函数均可实现消息的发送。 下列两个 函数均可实现消息的发送 function SendMessage(hWnd:HWND; Msg:UINT;
wParam:WPARAM; lParam:LPARAM) :LRESULT; stdcall; function PostMessage(hWnd:HWND; Msg:UINT; wParam:WPARAM; lParam:LPARAM) : BOOL; stdcall;
四、响应消息
1. 覆盖组件继承的虚拟方法 覆盖组件继承的虚拟方法WndProc procedure TNewComponent.WndProc(var message:TMessage); begin if message.Msg = 需要过滤的消息 then begin // 此处编写处理过滤消息代码 exit; end; inherited WndProc(message); dispatch(message); end;
2. 覆盖组件继承的虚拟方法 DefaultHandler 在继承类中对DefaultHandler过程进行覆盖, 过程进行覆盖, 在继承类中对 过程进行覆盖 同样可以实现类似于前一种方法的消息过 滤。
3. 自定义消息和消息处理方法 Windows 预 定 义 了 1024 个 编 码 从 $0000 到 $03FF的消息常量标识符,留出从 的消息常量标识符, 的消息常量标识符 留出从$0400到 到 $7FFF的编码空间用于用户自定义消息。 的编码空间用于用户自定义消息。 的编码空间用于用户自定义消息 其中的$0400已定义为 已定义为WM_USER。 因此 , 其中的 已定义为 。 因此, 自定义消息常量标识符的形式如下: 自定义消息常量标识符的形式如下: const WM_UserMsgName = WM_USER + N; // 其中, 其中,0<=N<=31743
4. TApplication的OnMessage事件 的 事件 每当应用程序从消息队列中检索到一个消息 便触发Application的 OnMessage事件 。 事件。 时 , 便触发 的 事件 由此, 由此,在消息被派送到对其响应和处理的 目标对象之前,有机会处理该消息。 目标对象之前,有机会处理该消息。
7.4 多线程编程
一、进程与线程 二、TThread类 类 三、创建线程类 四、线程的优先级与线程调度 线程的挂起、 五、线程的挂起、恢复和终止 六、线程的协调
一、进程与线程
操作系统中, 在Windows操作系统中,可以同时运行多个 操作系统中 程序,甚至可以启动一个程序的多个实例, 程序,甚至可以启动一个程序的多个实例, 此即所谓的多任务。可见, 此即所谓的多任务。可见,静态的程序与 在计算机中运行的程序是有区别的。 在
计算机中运行的程序是有区别的。为明 确概念, 确概念,特将载入内存准备执行的应用程 序称为进程。 序称为进程。
进程由下列部分组成: 进程由下列部分组成: 一个私有的、 一个私有的、4GB大小的虚拟地址空 大小的虚拟地址空 间; 程序相关的代码和数据; 程序相关的代码和数据; 操作系统分配给进程的
系统资源, 操作系统分配给进程的系统资源,如文 单独的消息队列、同步对象等; 件、单独的消息队列、同步对象等; 至少包含一个线程, 至少包含一个线程,这个线程称为主 线程,通过它可以创建或控制其他线程。 线程,通过它可以创建或控制其他线程
。
进程本身并不直接执行代码, 进程本身并不直接执行代码,进程内的基 本执行单元是线程。 本执行单元是线程。一个进程可以包含多 个线程,每个线程都可以独立运行, 个线程,每个线程都可以独立运行,并保 持各自的堆栈和寄存器的值。 持各自的堆栈和寄存器的值。一个线程可 以控制另一个线程的执行, 以控制另一个线程的执行,一个进程内的 各个线程共享该进程的虚拟空间和系统资 而不同进程之间则互不干扰。 源。而不同进程之间则互不干扰。
二、TThread类
TThread类封装了 类封装了Windows API和System 类封装了 和 单元中有关线程运用的函数和例程。 单元中有关线程运用的函数和例程。与 VCL中一般的类不同的是:TThread类是 中一般的类不同的是: 中一般的类不同的是 类是 一个抽象类,其所带方法是虚拟抽象的, 一