`
noar
  • 浏览: 28161 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[原]线程消息拾遗

阅读更多
PostThreadMessage函数是给线程发送线程消息用的,所以接受消息的线程首先要建立一个消息队列才能接受该线程消息。用PeekMessage函数就能强制系统建立起一个消息队列。建立方法如下:
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
但是,会出现下面这种情况:如果发送线程消息的时候,接受线程的消息队列没有启动的时候,消息就会丢失,这种情况怎么办呢?

在启动消息线程的时候启动一个设置一个event object就可以了,等消息线程的消息队列准备好后signal一下这个event,等待线程就可以发送消息了。这样避免了消息丢失。

PostThreadMessage函数发送的消息是不与窗口相对应的,按照一般规则,如果不与窗口帮定的消息Dispatch函数是不进行消息派发的。因此,如果接受线程是一个窗口消息队列,那么该消息将会丢失。所以,这种情况就要单独使用一个线程来进行接受了,然后给那个窗口消息队列发送窗口消息。

系统的消息号WM_USER消息以前定义的消息,所以用户自定义消息需要用“WM_USER + 整数”表示。不过建议还是使用RegisterWindowMessage函数来注册一个Windows消息,该函数的返回值就是这个消息的标号,这个可以保证不会跟现有消息重复。

需要注意的是,Windows NT下的消息队列最大允许放10000个消息,这其实足够了,所以如果你的程序发送的消息导致消息队列超出了最大值,你就应该考虑你的程序是否需要重新设计了(其实,大都不用考虑,应该需要重新设计)。也可以通过修改注册表的默认值来更改消息队列存储最大数:
HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft \Windows NT \CurrentVersion \Windows
下的USERPostMessageLimit值,最小默认值为4000;
分享到:
评论

相关推荐

    C#多线程消息处理例子

    在C#编程中,多线程消息处理是一个关键的领域,尤其在开发高效、响应迅速的应用程序时。本文将深入探讨“C#多线程消息处理例子”中的核心概念,包括消息处理、线程间通信、UI交互以及代理的使用。 首先,我们需要...

    MFC线程自定义消息循环

    默认情况下,MFC应用程序会为主线程创建一个消息循环,但当创建新线程时,这个新线程不会自动包含消息循环。因此,为了在线程中处理这些消息,我们需要手动为线程添加自定义的消息循环。 要在线程中创建自定义的...

    线程消息队列

    线程消息队列是并发编程中一种常见的同步和通信机制,尤其在多线程环境和异步处理中扮演着重要角色。它通过提供一个数据结构,即消息队列,来协调多个生产者线程和一个或多个消费者线程之间的交互。这种设计模式允许...

    演示线程消息发送,只是一个简单的实例

    在IT领域,线程消息发送是一种常见的多线程编程技术,用于在线程间进行通信和同步。本实例的目的是向开发者展示如何实现这一机制。在标题和描述中提到的"演示线程消息发送",我们可以理解为这是一个教学或示例项目,...

    自定义线程消息循环

    在计算机编程中,尤其是Windows API或MFC框架下,线程消息循环是一个核心概念,用于处理线程内的消息。线程消息循环允许线程接收和处理来自其他线程或者系统的消息,这些消息可能是用户交互、系统事件或者其他线程...

    易语言简单的多线程消息队列

    易语言简单的多线程消息队列。@Patek。

    C++多线程,消息队列用法

    C++多线程,消息队列用法,为了凑够20个字,拼了。

    线程间通信方式3:消息传递方式

    本示例“线程间通信方式3:消息传递方式”着重介绍了通过消息传递实现线程间的通信。下面将详细阐述这种通信方式以及相关的技术点。 1. **消息传递**: - 在Windows环境下,消息传递是通过消息队列、消息循环和...

    windows的多线程消息机制

    Windows的多线程消息机制是操作系统提供的一种处理并发任务的方式,尤其在开发MFC应用程序时,理解这一机制至关重要。在Windows环境下,线程是程序执行的独立单元,每个线程都有自己的消息队列,用于接收和处理来自...

    线程及消息机制

    ### 线程及消息机制在嵌入式WinCE中的应用 #### 1. 嵌入式WinCE概述 嵌入式WinCE系统是一种基于Windows内核的实时操作系统,适用于移动设备、工业控制和其他嵌入式应用领域。WinCE支持多任务处理,并且提供了丰富...

    线程与消息处理

    在IT行业中,线程与消息处理是Android应用开发中的核心概念,它们对于实现高效、响应式的用户界面至关重要。本文将深入探讨这两个主题,以及它们如何在Android系统中协同工作。 线程是操作系统分配CPU时间的基本...

    MFC多线程发送消息

    1. AfxPostMessage():与::PostMessage()类似,可以在一个线程中向另一个线程的窗口队列发送消息,但AfxPostMessage()会自动处理跨线程消息的问题。 2. AfxPumpMessage():在非主消息循环的线程中,需要调用这个函数...

    实时接收发送消息(接收消息线程阻塞,发送消息线程唤醒)

    在标题和描述中提到的“实时接收发送消息(接收消息线程阻塞,发送消息线程唤醒)”是一个典型的并发编程问题,涉及到线程管理和通信。以下是对这个主题的详细讲解: 1. **线程与并发**: - 线程是程序执行的最小...

    从现实生活中理解android 线程消息机制

    在Android系统中,线程消息机制是一个核心概念,它确保了应用程序的高效运行和用户体验的流畅性。这个机制主要由三部分组成:Handler、Looper和Message Queue。下面我们将从现实生活中的例子来深入理解这个机制,并...

    MFC 多线程之间通过消息传递数据

    每个窗口都有自己的消息队列,当一个线程发送消息到另一个线程的窗口时,消息会被放入接收线程的消息队列中,等待被处理。 步骤如下: 1. **创建消息**: 首先,你需要定义一个自定义消息。这可以通过使用...

    多线程之间消息通信

    "多线程之间消息通信"这一主题主要探讨了如何在不同线程间传递信息,实现有效的协作。 线程间通信(Inter-Thread Communication,ITC)是多线程编程中的核心概念,它允许线程共享数据、交换状态或者同步执行。在...

    android 线程之间通过Handler发送消息

    然而,由于Android UI操作必须在主线程中执行,因此我们需要一种机制来在不同线程间传递消息,这就是Handler的作用。本文将深入探讨Android中如何通过Handler实现线程间的通信。 首先,理解Android线程模型至关重要...

    多线程使用消息队列

    在IT行业中,多线程和消息队列是两种常见的并发处理和系统通信技术。多线程使得一个程序能够同时执行多个任务,而消息队列则是实现进程间通信(IPC)的有效方式,尤其在分布式系统中广泛应用。下面我们将深入探讨这...

    细说UI线程和Windows消息队列

    ### 细说UI线程与Windows消息队列 在探讨Windows应用程序的工作原理时,理解UI线程和消息队列的概念至关重要。UI线程(User Interface Thread)与消息队列(Message Queue)是实现用户交互的核心机制,它们确保了应用...

Global site tag (gtag.js) - Google Analytics