硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4407|回复: 5
收起左侧

[emWin] 切不可在窗口或者对话框回调函数里面调用阻塞式的对话框GUI_ExecDialogBox,会导致

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2016-4-24 01:14:40 | 显示全部楼层 |阅读模式
切不可在窗口或者对话框回调函数里面调用阻塞式的对话框GUI_ExecDialogBox,会导致任务栈空间一直在减小
比如这个帖子里面的问题:http://www.armbbs.cn/forum.php?mod=viewthread&tid=18914
========================================================
没打开关闭一次,任务栈的利用率都在增加:
初始化:
初始化.png

打开关闭1次:
打开关闭一次.png

打开关闭2次:
打开关闭两次.png

打开关闭3次:
打开关闭三次.png



最后直至任务栈不够用后死机

回复

使用道具 举报

11

主题

122

回帖

160

积分

初级会员

积分
160
发表于 2016-4-24 10:40:27 | 显示全部楼层
是不是这样,因为阻塞对话框不能响应别的对话框回调函数,就像在有阻塞对话框的同时点击别的对话框不能引起重绘等事件,而非阻塞就能实现两个窗口的切换。在这里表现就是占用内存没有被释放
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
 楼主| 发表于 2016-4-24 11:00:50 | 显示全部楼层

回 有梦为马 的帖子

有梦为马:是不是这样,因为阻塞对话框不能响应别的对话框回调函数,就像在有阻塞对话框的同时点击别的对话框不能引起重绘等事件,而非阻塞就能实现两个窗口的切换。在这里表现就是占用内存没有被释放
 (2016-04-24 10:40) 
不清楚,没有深究过,不过可以看看早期的uCGUI3.98源码深究下。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2016-4-24 14:23:16 | 显示全部楼层
win32上,窗口中弹出个messagebox这样的阻塞对话框不是很普遍的么,,,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
 楼主| 发表于 2016-4-25 01:07:20 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:win32上,窗口中弹出个messagebox这样的阻塞对话框不是很普遍的么,,, (2016-04-24 14:23) 
也有可能是关闭的方法不对,回头我再研究研究。
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2023-2-13 13:16:01 | 显示全部楼层
应该是Exec的WM_DefaultProc函数在最外环不在default:break里面,导致调用了Exec的窗口对象依然在进行事件循环的原因。正常的子窗口被创建并Exec以后,父窗口的事件循环会被停止,除非子窗口发送给父窗口消息才被执行一次,这时父窗口的回调调用者是子窗口。否则就是父窗口和子窗口都在执行Exec并交叉调用导致不停的递归,堆栈持续消耗。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 01:58 , Processed in 0.230998 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表