首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 线程postmessage一个情况 [已结贴,结贴人:aa65433]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aa65433
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-19 18:49:36 楼主
    我开了一个工作线程,使用postmessage向主线程发送消息。发现当主线程使用afxmessagebox正好弹出一个提示框的时候,工作线程投递的postmessage消息就丢失了,这个要怎么处理的?3Q
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jameshooo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      4

    发表于:2008-08-19 21:13:201楼 得分:10
    afxmessagebox启动了内部的消息循环,而内部消息循环不能处理自定义消息,当然会丢弃。最好的方法是在主线程中创建一个窗口,然后向窗口发送自定义消息,在窗口过程中处理自定义消息,这样即使使用了内部消息循环也能进入窗口过程。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greatws
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 22:04:202楼 得分:10
    用SendMessage试下,有可能你post的是一个局部变量地址,主线程还没有处理就直接释放了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 5

      2

      13

    发表于:2008-08-19 22:37:553楼 得分:10
    用SendMessage,或者用SetWindowsHookEx钩WH_GETMESSAGE,或者使用消息之外的其它方式通讯。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aa65433
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 08:47:274楼 得分:0
    to jameshooo
    我的主线程就是ui线程,他存在窗口的,不知道你说建一个窗口是什么意思

    to greatws & cnzdgs
    sendmessage我用过,发现很快就返回了,而且我查了下,线程间通信最好是用postmessage.

    我尝试下其他方法...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • unsigned
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      2

      5

    发表于:2008-08-20 09:06:035楼 得分:10
    引用 4 楼 aa65433 的回复:
    而且我查了下,线程间通信最好是用postmessage.

    先要看清楚,这个建议所伴随的理由。应该是说在能够使用PostMessage的情况下最好使用PostMessage,否则可能导致问题。
    1.SendMessage的是阻塞的,将会导致SendMessage的发起线程等待处理线程的返回。如果业务逻辑上需要此时的发起线程依旧往下执行,则与业务逻辑相违背。
    2.线程在SendMessage之前进入了一个临界区,而后SendMessage等待另一个线程处理,此时另一个线程正在尝试进入该临界区。

    如果不存在上述包括类似的问题,则并不能说明不能使用SendMessage。对UI线程同步非必要的时候最好是不要使用消息。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aa65433
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 09:33:466楼 得分:0
    我所碰到的问题原因应该就是jameshooo 说的自定义消息被抛弃。我使用sendmessage之后,调试的时候线程没有阻塞,仍然继续执行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • unsigned
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      2

      5

    发表于:2008-08-20 09:38:017楼 得分:0
    引用 6 楼 aa65433 的回复:
    我所碰到的问题原因应该就是jameshooo 说的自定义消息被抛弃。我使用sendmessage之后,调试的时候线程没有阻塞,仍然继续执行

    SendMessage处理失败?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aa65433
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 10:41:218楼 得分:0
    SendMessage立刻就返回了,线程没有阻塞
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • SoftSoftSoft2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 11:05:159楼 得分:5
    数据的传递,也可以用函数指针传递啊。
    不一定要发送消息。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aa65433
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:05:1810楼 得分:0
    不是为了传递数据,是某种状态变化,通知UI显示出来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jameshooo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      4

    发表于:2008-08-20 23:18:3111楼 得分:0
    检查一下目标HWND是否正确,记得用SendMessage来测试,看看消息响应函数能否进入
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aa65433
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 08:42:3612楼 得分:0
    SendMessage,也无法获得,自己写了个类似messagebox的对话框,发现就能接受到消息的了阿
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xsc2001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 11:11:4313楼 得分:5
    线程间通信方式有多种多样的,可以通过发送消息的方式,也可以通过共享内存区域的方式,也可以通过外部共享文件,所以你可以用公共变量去实现,主线程去反复检测其他线程发来的消息就行了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aa65433
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 18:42:0414楼 得分:0
    找到原因了,我消息链表加错了,在弹出messagebox的时候也能接受消息的,是我自己的失误,感谢大家
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aa65433
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 18:42:0415楼 得分:0
    找到原因了,我消息链表加错了,在弹出messagebox的时候也能接受消息的,是我自己的失误,感谢大家
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved