首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
VC/MFC
进程/线程/DLL
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
线程postmessage一个情况
[已结贴,结贴人:aa65433]
加为好友
发送私信
在线聊天
aa65433
等级:
可用分等级:
贫农
总技术分:
581
总技术分排名:
29152
揭贴率:
100.00%
发表于:
2008-08-19 18:49:36
楼主
我开了一个工作线程,使用postmessage向主线程发送消息。发现当主线程使用afxmessagebox正好弹出一个提示框的时候,工作线程投递的postmessage消息就丢失了,这个要怎么处理的?3Q
问题点数:
50
回复次数:
15
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameshooo
胡柏华
等级:
可用分等级:
中农
总技术分:
52967
总技术分排名:
163
2
4
发表于:
2008-08-19 21:13:20
1
楼 得分:
10
afxmessagebox启动了内部的消息循环,而内部消息循环不能处理自定义消息,当然会丢弃。最好的方法是在主线程中创建一个窗口,然后向窗口发送自定义消息,在窗口过程中处理自定义消息,这样即使使用了内部消息循环也能进入窗口过程。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
greatws
研究DSing...
等级:
可用分等级:
富农
总技术分:
11117
总技术分排名:
1936
发表于:
2008-08-19 22:04:20
2
楼 得分:
10
用SendMessage试下,有可能你post的是一个局部变量地址,主线程还没有处理就直接释放了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
cnzdgs
回贴亦是善举
等级:
可用分等级:
贫农
总技术分:
113140
总技术分排名:
43
5
2
13
发表于:
2008-08-19 22:37:55
3
楼 得分:
10
用SendMessage,或者用SetWindowsHookEx钩WH_GETMESSAGE,或者使用消息之外的其它方式通讯。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
aa65433
等级:
可用分等级:
贫农
总技术分:
581
总技术分排名:
29152
发表于:
2008-08-20 08:47:27
4
楼 得分:
0
to jameshooo
我的主线程就是ui线程,他存在窗口的,不知道你说建一个窗口是什么意思
to greatws & cnzdgs
sendmessage我用过,发现很快就返回了,而且我查了下,线程间通信最好是用postmessage.
我尝试下其他方法...
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
unsigned
僵哥(重要的不是为之付出了多少,误导才是最大的失败)
等级:
可用分等级:
乞丐
总技术分:
76937
总技术分排名:
80
3
2
5
发表于:
2008-08-20 09:06:03
5
楼 得分:
10
引用 4 楼 aa65433 的回复:
而且我查了下,线程间通信最好是用postmessage.
先要看清楚,这个建议所伴随的理由。应该是说在能够使用PostMessage的情况下最好使用PostMessage,否则可能导致问题。
1.SendMessage的是阻塞的,将会导致SendMessage的发起线程等待处理线程的返回。如果业务逻辑上需要此时的发起线程依旧往下执行,则与业务逻辑相违背。
2.线程在SendMessage之前进入了一个临界区,而后SendMessage等待另一个线程处理,此时另一个线程正在尝试进入该临界区。
如果不存在上述包括类似的问题,则并不能说明不能使用SendMessage。对UI线程同步非必要的时候最好是不要使用消息。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
aa65433
等级:
可用分等级:
贫农
总技术分:
581
总技术分排名:
29152
发表于:
2008-08-20 09:33:46
6
楼 得分:
0
我所碰到的问题原因应该就是jameshooo 说的自定义消息被抛弃。我使用sendmessage之后,调试的时候线程没有阻塞,仍然继续执行
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
unsigned
僵哥(重要的不是为之付出了多少,误导才是最大的失败)
等级:
可用分等级:
乞丐
总技术分:
76937
总技术分排名:
80
3
2
5
发表于:
2008-08-20 09:38:01
7
楼 得分:
0
引用 6 楼 aa65433 的回复:
我所碰到的问题原因应该就是jameshooo 说的自定义消息被抛弃。我使用sendmessage之后,调试的时候线程没有阻塞,仍然继续执行
SendMessage处理失败?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
aa65433
等级:
可用分等级:
贫农
总技术分:
581
总技术分排名:
29152
发表于:
2008-08-20 10:41:21
8
楼 得分:
0
SendMessage立刻就返回了,线程没有阻塞
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
SoftSoftSoft2008
等级:
可用分等级:
富农
总技术分:
1774
总技术分排名:
12140
发表于:
2008-08-20 11:05:15
9
楼 得分:
5
数据的传递,也可以用函数指针传递啊。
不一定要发送消息。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
aa65433
等级:
可用分等级:
贫农
总技术分:
581
总技术分排名:
29152
发表于:
2008-08-20 17:05:18
10
楼 得分:
0
不是为了传递数据,是某种状态变化,通知UI显示出来
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
jameshooo
胡柏华
等级:
可用分等级:
中农
总技术分:
52967
总技术分排名:
163
2
4
发表于:
2008-08-20 23:18:31
11
楼 得分:
0
检查一下目标HWND是否正确,记得用SendMessage来测试,看看消息响应函数能否进入
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
aa65433
等级:
可用分等级:
贫农
总技术分:
581
总技术分排名:
29152
发表于:
2008-08-21 08:42:36
12
楼 得分:
0
SendMessage,也无法获得,自己写了个类似messagebox的对话框,发现就能接受到消息的了阿
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
xsc2001
program life
等级:
可用分等级:
掌柜
总技术分:
3878
总技术分排名:
8243
发表于:
2008-08-21 11:11:43
13
楼 得分:
5
线程间通信方式有多种多样的,可以通过发送消息的方式,也可以通过共享内存区域的方式,也可以通过外部共享文件,所以你可以用公共变量去实现,主线程去反复检测其他线程发来的消息就行了。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
aa65433
等级:
可用分等级:
贫农
总技术分:
581
总技术分排名:
29152
发表于:
2008-08-21 18:42:04
14
楼 得分:
0
找到原因了,我消息链表加错了,在弹出messagebox的时候也能接受消息的,是我自己的失误,感谢大家
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
aa65433
等级:
可用分等级:
贫农
总技术分:
581
总技术分排名:
29152
发表于:
2008-08-21 18:42:04
15
楼 得分:
0
找到原因了,我消息链表加错了,在弹出messagebox的时候也能接受消息的,是我自己的失误,感谢大家
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友