|

50精币
之前发帖询问 PostThreadMessageA 消息丢失问题,没有上传完整的程序可能大家不是很能理解我在说什么,这次我上传了一个示例程序,能复现我的问题。程序启动之后先点击创建线程,然后点击发送消息,发送消息点击足够快,大于子线程的处理时间,那这个消息发送成功但是无法被子线程接收到
主要代码如下:
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 线程ID | 整数型 | | 线程句柄 | 整数型 | |
如果真 (线程句柄 > 0 ) 信息框 (“线程已启动”, 0, , _启动窗口. 取窗口句柄 ()) 返回 () 启动线程 (&线程程序, , 线程句柄 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 死循环 | 逻辑型 | | | 接收消息 | 整数型 | | | msg | 消息结构 | | |
如果真 (线程ID > 0 ) 返回 () 调试输出 (“线程已启动,线程ID:” + 到文本 (线程ID )) 线程ID = 线程_取自线程ID ()死循环 = 真 判断循环首 (死循环 ) 接收消息 = GetMessage (msg, -1, 0, 0 ) 调试输出 (“接收消息结果:” + 到文本 (接收消息 ))  如果真 (接收消息 = 0 )  线程ID = 0   线程句柄 = 0  跳出循环 ()  调试输出 (“=============== 接收到消息 ==============”) 调试输出 (“hwnd:” + 到文本 (msg.hwnd )) 调试输出 (“message:” + 到文本 (msg.message )) 调试输出 (“wParam:” + 到文本 (msg.wParam )) 调试输出 (“lParam:” + 到文本 (msg.lParam )) 调试输出 (“time:” + 到文本 (msg.time )) 调试输出 (“pt_x:” + 到文本 (msg.pt_x )) 调试输出 (“pt_y:” + 到文本 (msg.pt_y )) 调试输出 (“=============== 接收到消息 END ==============”) 程序_延时 (2000 ) 判断循环尾 () 如果真 (线程ID ≤ 0 ) 信息框 (“请先启动线程”, 0, , _启动窗口. 取窗口句柄 ()) 返回 () 消息发送结果 = PostThreadMessageA (线程ID, 2000, 1, 2 )调试输出 (“消息发送结果:” + 到文本 (消息发送结果 )) 如果真 (线程ID ≤ 0 ) 信息框 (“请先启动线程”, 0, , _启动窗口. 取窗口句柄 ()) 返回 () PostThreadMessageA (线程ID, 18, 1, 2 )
我的疑问主要在于子线程接收消息那一块,也就是 线程程序 这个方法中,如果接收到消息开始进行业务处理,假设这个业务处理耗时 2 秒,那么这 2 秒时间内,发送给线程的消息都无法被接收到,相当于丢失了,想咨询一下论坛的大佬这是为什么?如何解决?
|
-
|