PostThreadMessage失败,GetLastError返回6。

Alvin_Hugh 2013-09-12 11:40:44
问题如题。由于公司代码不能拿出来 ,代码也不能贴出来,请原谅!这种情况下返回6是有什么可能的原因啊?
...全文
378 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alvin_Hugh 2014-12-29
  • 打赏
  • 举报
回复
很久没来看了,谢谢各位的精彩回答
lm_whales 2013-09-21
  • 打赏
  • 举报
回复
创建线程时候,传递一个参数,其中放置一个事件,表示线程已经运行。 线程退出前通知主线程,停止发送消息消息处理完成退出。 创建的代码检测这个事件然后退出,这是可以开始 PostMessage
davidyu720 2013-09-13
  • 打赏
  • 举报
回复
参考MSDN PostThreadMessage Remarks部分,小心处理好发送/接收之间的同步协作。
davidyu720 2013-09-13
  • 打赏
  • 举报
回复
处理线程初始化加入代码,可以尽快创建线程的消息队列: // 1. 创建消息队列 MSG msg; PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
Alvin_Hugh 2013-09-13
  • 打赏
  • 举报
回复
我用的是多个线程处理,一个消息分发线程,他负责创建其它的多个消息处理线程。然后将收到的消息根据消息处理线和的忙闲状态和处理消息的分类发给他们处理。这种情况在debug环境下没有问题,但是在Release环境中高概率出现(非必现)。所以我觉得应该可能是以分发线程启动以后,算是线程还没有启动完成的情况下,消息分发线程就把消息发送给了处理线程导致的。如果我在消息发送的地方Sleep(100),这样就没有问题了。但是我不明白,如果线程没有准备好,消息队列没有建立的情况下,应该是报的1444,怎么会报6?
davidyu720 2013-09-13
  • 打赏
  • 举报
回复
ErrLook 6 句柄无效,意思是因为HWND窗口句柄不存在。 但你用的是PostThreadMessage,用到的是thread identifier,不是句柄。 MSDN: returns ERROR_INVALID_THREAD_ID if idThread is not a valid thread identifier, or if the thread specified by idThread does not have a message queue. #define ERROR_INVALID_THREAD_ID 1444L 所以不知道LZ的ErrLook 6到底怎么来的。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧