社区
C++ 语言
帖子详情
MFC 多线程环境下,更新界面的问题
enic
2010-06-10 10:06:19
我知道的最漂亮的方式是 消息机制
那啥,你不要来问我,我到了会通知你
但是个人觉得消息机制比较麻烦,而且,如果我想传递大量的内存块,可能会因为发送太快处理太慢而内存告急。
比如实时图像,一个线程专门抓图,如何发到主线程去。有能像消息一样优雅。
...全文
517
23
打赏
收藏
MFC 多线程环境下,更新界面的问题
我知道的最漂亮的方式是 消息机制 那啥,你不要来问我,我到了会通知你 但是个人觉得消息机制比较麻烦,而且,如果我想传递大量的内存块,可能会因为发送太快处理太慢而内存告急。 比如实时图像,一个线程专门抓图,如何发到主线程去。有能像消息一样优雅。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
enic
2010-06-24
打赏
举报
回复
容哥说的非常正确。
不过,我的本意是不是直接传递智能指针,而是再封装一次消息参数。
我发现com里边 有类似的技术,过一阵再来结贴。
lvshaoqing
2010-06-12
打赏
举报
回复
[Quote=引用 20 楼 arong1234 的回复:]
好吧,那你用用看
引用 19 楼 lvshaoqing 的回复:
引用 18 楼 arong1234 的回复:
有什么不可以的啊。 先不说指针大小是否是64位的。 及时是的话,也可以高低字节分开,发到消息的两个参数中。
[/Quote]
?????????
arong1234
2010-06-12
打赏
举报
回复
好吧,那你用用看
[Quote=引用 19 楼 lvshaoqing 的回复:]
引用 18 楼 arong1234 的回复:
有什么不可以的啊。 先不说指针大小是否是64位的。 及时是的话,也可以高低字节分开,发到消息的两个参数中。[/Quote]
lvshaoqing
2010-06-12
打赏
举报
回复
[Quote=引用 18 楼 arong1234 的回复:]
你测试过真可以?消息只能带4字节的数据,按值传送必须确保智能指针小于等于4字节,这几乎是不可能的。所以不要妄下结论。
至于“发送太快,处理太慢”的问题,说明你待处理数据的量大于你的处理能力,如果消息不行,其他方法一定也有问题
引用 7 楼 cl_gamer 的回复:
可以的
按值传递可以
我的一贯风格是 ui线程 不允许wait
用消息机制可能会出现这样的情况:发送太快……
[/Quote]
有什么不可以的啊。 先不说指针大小是否是64位的。 及时是的话,也可以高低字节分开,发到消息的两个参数中。
arong1234
2010-06-12
打赏
举报
回复
你测试过真可以?消息只能带4字节的数据,按值传送必须确保智能指针小于等于4字节,这几乎是不可能的。所以不要妄下结论。
至于“发送太快,处理太慢”的问题,说明你待处理数据的量大于你的处理能力,如果消息不行,其他方法一定也有问题
[Quote=引用 7 楼 cl_gamer 的回复:]
可以的
按值传递可以
我的一贯风格是 ui线程 不允许wait
用消息机制可能会出现这样的情况:发送太快,处理太慢,时间一长内存就飚升。
[/Quote]
arong1234
2010-06-12
打赏
举报
回复
很简单的两个问题:
1。你能确保“智能指针”能被分成2个四字节么?更基本的,智能指针不是指针哦!你说的64位大概是说的64位指针吧,智能指针可不是一回事情
2。你怎么把一个C++对象分成“高”“低”两个字节?
[Quote=引用 21 楼 lvshaoqing 的回复:]
引用 20 楼 arong1234 的回复:
好吧,那你用用看
引用 19 楼 lvshaoqing 的回复:
引用 18 楼 arong1234 的回复:
有什么不可以的啊。 先不说指针大小是否是64位的。 及时是的话,也可以高低字节分开,发到消息的两个参数中。
?????????
[/Quote]
ForestDB
2010-06-11
打赏
举报
回复
帮顶。
lvshaoqing
2010-06-11
打赏
举报
回复
一个链表加锁不就解决了么。 界面现场不停的轮询链表,如果有数据就...
另外的现场就不停的向链表中加数据。
屎带芬
2010-06-11
打赏
举报
回复
用内存映射文件传递大数据量到ui线程,当数据变更时用event同步刷新界面,绝对好用,哥用过!
enic
2010-06-11
打赏
举报
回复
可以的
按值传递可以
我的一贯风格是 ui线程 不允许wait
用消息机制可能会出现这样的情况:发送太快,处理太慢,时间一长内存就飚升。
独酌逸醉
2010-06-11
打赏
举报
回复
指针传参。
lvshaoqing
2010-06-11
打赏
举报
回复
[Quote=引用 14 楼 taodm 的回复:]
消息就是极优雅的方式了。等你真的所谓效率不够了再来讨论。
[/Quote]
....
lvshaoqing
2010-06-11
打赏
举报
回复
[Quote=引用 13 楼 cl_gamer 的回复:]
引用 9 楼 lvshaoqing 的回复:
一个链表加锁不就解决了么。 界面现场不停的轮询链表,如果有数据就...
另外的现场就不停的向链表中加数据。
这样链表需要 读 写 都需要加锁
如果工作线程由于某些原因当掉了,ui也跟着完了
[/Quote]
工作线程由于某些原因当掉了? 难道你就不能捕获错误么。 如果当掉了,你就把锁释放。 捕获异常有什么问题? 链表数据中,UI线程只读的话,也完全可以不用加锁。
taodm
2010-06-11
打赏
举报
回复
消息就是极优雅的方式了。等你真的所谓效率不够了再来讨论。
enic
2010-06-11
打赏
举报
回复
[Quote=引用 9 楼 lvshaoqing 的回复:]
一个链表加锁不就解决了么。 界面现场不停的轮询链表,如果有数据就...
另外的现场就不停的向链表中加数据。
[/Quote]
这样链表需要 读 写 都需要加锁
如果工作线程由于某些原因当掉了,ui也跟着完了
enic
2010-06-11
打赏
举报
回复
[Quote=引用 8 楼 stephen_yin 的回复:]
用内存映射文件传递大数据量到ui线程,当数据变更时用event同步刷新界面,绝对好用,哥用过!
[/Quote]
event 需要查询么?
还是,主动通知?
我拒绝在UI中使用Wait***系列函数···
enic
2010-06-11
打赏
举报
回复
[Quote=引用 9 楼 lvshaoqing 的回复:]
一个链表加锁不就解决了么。 界面现场不停的轮询链表,如果有数据就...
另外的现场就不停的向链表中加数据。
[/Quote]
珍爱声明,UI线程远离 锁···
arong1234
2010-06-10
打赏
举报
回复
智能指针是不可能通过消息传递的,所以不会是“消息+智能指针”
arong1234
2010-06-10
打赏
举报
回复
我想全局变量当然是不好的选择,但是消息+指针应该是比较好的方法,不知道楼主为什么不想用[Quote=引用 4 楼 cl_gamer 的回复:]
我觉得 加锁 和 全局变量 都很恶劣
又不像用 消息+智能 指针
求更犀利的方案···
[/Quote]
enic
2010-06-10
打赏
举报
回复
我觉得 加锁 和 全局变量 都很恶劣
又不像用 消息+智能 指针
求更犀利的方案···
加载更多回复(3)
MFC
多线程
的创建,包括工作线程和用户
界面
线程
《
MFC
多线程
的创建,包括工作线程和用户
界面
线程》全面讲解
MFC
多线程
的创建,
界面
多线程
与工作者
多线程
,
多线程
的起源、继承与派生,两
多线程
之间的区别与相同点,定时器与
多线程
的关系与异同(定时器是定时优先抢占优先消息执行) ,定时器过多容易导致
界面
主线程消耗,导致
界面
不能
更新
刷屏;抢占式执行容易导致消息堵塞!发送消息的时候,也有发送线程消息函数 PostThreadMessage来执行线程之间的消息,线程有启动线程与挂起线程;定时器有启动定时器,sleep休眠,杀死定时器!
MFC
多线程
工作者线程 用户
界面
线程
MFC
多线程
工作者线程 用户
界面
线程
mfc
编写的用户
界面
多线程
的小例子
mfc
编写的用户
界面
多线程
的小例子 包含有相关内容的说明以及程序书写的详细步骤,简单易于理解
MFC
多线程
应用, 包括工作线程, 用户
界面
线程
MFC
多线程
应用, 包括工作线程, 用户
界面
线程, 例子多达9个,欢迎下载测试
MFC
多线程
之间通过消息传递数据
MFC
编程,一个对话框程序,
多线程
之间通过消息传递数据。
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章