SendMessage跨线程和跨进程

本文详细解析了SendMessage在跨线程通信中的工作原理,包括同一进程内的线程间消息处理和不同进程间的通信机制。主要内容涉及线程消息队列、线程切换、消息处理流程以及线程等待与唤醒。强调了在多线程编程中避免直接操作CWnd实例,而是使用窗口句柄进行API操作的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.跨线程(同一个进程内)

如果,窗口是由非主线程创建的,那么,那个线程将会跑一个自己的窗口消息队列。调用SendMessage会切换到该线程上去执行。
主线程是个窗口线程,在另外一个工作线程中调用了窗口线程的SendMessage,那么执行的过程是:
1)工作线程挂起
2)切换到窗口线程,执行对应的消息处理
3)切换回工作线程

SendMessage : 如果指定窗口由调用线程创建,那么窗口过程会被当成一个子程序立即调用。如果指定窗口由另外一个线程创建,那么系统会切换到那个线程,并且调用合适的窗口过程。在线程之间传递的消息仅仅当接收线程执行message retrieval code才会被处理。发送线程会被堵塞直到接收线程处理完消息。但是,发送线程在等待的同时会处理收到的nonqueued messages 。为了阻止这一点,使用带有SMTO_BLOCK参数 的SendMessageTimeout .

在多线程的程序里面,最好不要操作CWnd的实例指针,而是用API函数操作HWND窗口句柄。

2.跨线程(不同的进程)

SendMessage对于在同一个线程中调用的话,直接调用的是当前线程所属窗口的窗口过程函数(WndProc);如果是跨线程调用SendMessage(),那个这个消息会被放在登记消息队列.登记消息队列中的消息优先级越高,越是能够得到优先响应,处理完成后返回给发送者线程.
  详细内容:
  如果调用SendMessage()的线程向该线程所建立的窗口发送一个消息, SendMessage()就很简

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程经验随笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值