PostThreadMessage是一个Windows API函数。其功能是将一个队列消息放入(寄送)到指定的消息队列里,不等待线程处理消息就返回。
PostThreadMessage的原型是这样的
BOOL PostThreadMessage( DWORD idThread,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
参数
idThread
其消息将被寄送的线程的线程标识符。如果线程没有消息队列,此函数将失败。当线程第一次调用一个Win 32 USER或GDI函数时,系统创建线程的消息队列。要得到更多的信息,参见备注。
Msg
指定将被寄送的消息的类型。
wParam
指定附加的消息特定信息。
IParam
指定附加的消息特定信息。
但是要注意以下问题
1 .PostThreadMessage有时会失败,报1444错误(Invalid thread identifier. )
其实这不一定是线程不存在的原因,也有可能是线程不存在消息队列(message queue)造成的。
事实上,并不是每个thread都有message queue,那如何让thread具有呢?
答案是,至少调用message相关的function一次,比如Get

PostThreadMessage是Windows API中用于向线程发送消息的函数,但并非所有线程都有消息队列。线程需要至少调用一次如GetMessage或PeekMessage的函数来创建消息队列。线程间的通信需要注意线程标识的有效性、内存管理以及避免发送同步消息。此外,PostThreadMessage在UI线程的特定情况下可能导致消息丢失。确保正确理解和使用此函数以避免潜在问题。
最低0.47元/天 解锁文章
273

被折叠的 条评论
为什么被折叠?



