捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >API档案 > 正文
26 2017.05

PostThreadMessage

点击次数:1250 更新时间:2017-5-26 9:24:18  【打印此页

函数功能:

PostThreadMessage 函数将一个消息放入指定线程的消息队列中,并且不等待线程处理消息就立即返回。


API 函数原型:

BOOL WINAPI PostThreadMessage(
  _In_ DWORD  idThread,
  _In_ UINT   Msg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);



参数解析:

参数

含义

idThread

1. 指定接收消息的线程的标识符
2. 如果指定的线程没有消息队列,则函数调用失败。(当线程第一次调用一个 Win32 USER 或 GDI 函数时,系统将创建线程的消息队列。更多细节请参考下方备注)
3. 消息发送需服从 UIPI(User Interface Privilege Isolation,用户界面特权隔离)技术,消息只能发送到较小或同等级别的进程中的线程的消息队列
4. 如果要往不同桌面的线程(所属进程拥有相同的 LUID)中发送消息,该线程需要拥有 SE_TCB_NAME 权限才行。否则,函数调用失败并返回 ERROR_INVALID_THREAD_ID
5. 该线程必须与调用者处于同一桌面,或所属进程拥有相同的 LUID。否则,函数调用失败并返回 ERROR_INVALID_THREAD_ID

Msg

1. 指定将被发送的消息
2. 请参考:Windows 常用消息及含义

wParam

消息的附加信息

lParam

消息的附加信息



返回值:

1. 如果该函数调用成功,返回值是非 0;

2. 如果该函数调用失败,返回值是 0(如果调用 GetLastError 函数的返回值是 ERROR_INVALID_THREAD_ID,说明 idThread 参数不是一个合法的线程标识符,或者 idThread 参数指定的线程不具有消息队列;如果调用 GetLastError 函数的返回值是 ERROR_NOT_ENOUGH_QUOTA,则说明投递消息超出限制)。


备注:

1. 当消息被 UIPI 所阻断,调用 GetLastError 函数可以获得错误代码是 5(拒绝访问)。

2. 接收消息的线程必须创建一个消息队列,否则 PostThreadMessage 函数调用失败。

遇到这个问题,请使用下边方法解决:

  • 创建一个事件对象,然后创建线程。
  • 在调用 PostThreadMessage 函数前,使用 WaitForSingleObject 函数等待事件被设置为有信号状态。
  • 在发送消息的线程中,调用 PeekMessage 函数(PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE))来强制系统创建消息队列。
  • 设置事件,表示线程已准备好接收寄送的消息。


3. 从消息队列中获取消息,请使用 GetMessagePeekMessage 函数。MSG 结构的 hwnd 成员应该是 NULL。

4. PostThreadMessage 发送的消息并不与窗口相关联。就一般规则而言,不与窗口相关联的消息不能通过 DispatchMessage 函数分派。因此,如果接收消息的线程在模式循环中(例如 MessageBoxDialogBox),消息将可能丢失。应该使用线程钩子在模式循环下拦截线程消息。

5. 系统只对系统级的消息(0 ~ WM_USER-1)进行封送处理。发送自定义消息(>= WM_USER)到另一个进程,你需要自己对消息进行封送处理。

6. 每个消息队列限制可以放入 10,000 个消息。这个限制应该是足够大的,如果你的应用程序超过限制,那么它应该重新设计以避免消耗太多的系统资源。不过修改下边注册表项,可以调整这个限制:

| HKEY_LOCAL_MACHINE
| -- SOFTWARE
| -- -- Microsoft
| -- -- -- Windows NT
| -- -- -- -- CurrentVersion
| -- -- -- -- -- Windows
| -- -- -- -- -- -- USERPostMessageLimit

注:可调节的最小值是 4000。

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1250 更新时间:2017-5-26 9:24:18  【打印此页

上一条:PostMessage

下一条:GetLastError

关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修