咨询一下CDialog::DoModal()

flyskytoday 2010-04-27 09:16:09
以前一直认为DoModal()是完全阻塞的,但发现自己的理解有错
如下测试
CDialogMsg MyClose; //在退出时,加提示,显示上有倒计时,自动关闭
MyClose.DoModal();//不完全阻塞
MessageBox("a");//这个是完全阻塞
上面三行代码,测试了几次
第二行很不稳定,有时能显示一下就关闭,有时一闪就自动转到第三行
第三行必须点击确认

想请教一下大家原因?
还有我想把第二行做成与第三行一样效果的东东,请问如何做?
...全文
378 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
finder_zhang 2010-04-29
  • 打赏
  • 举报
回复
就是因为你的定时器调用了 CDialog::OnOK() ,关窗的是这个函数.
flyskytoday 2010-04-29
  • 打赏
  • 举报
回复
感谢大家回复,是我错了,DoModal是阻塞模式
12楼说得对,是定时器造成的
gg606 2010-04-27
  • 打赏
  • 举报
回复
应该是定时器造成的
kydef 2010-04-27
  • 打赏
  • 举报
回复
参考MSDN,单步跟踪一下程序,看看流程...
Eleven 2010-04-27
  • 打赏
  • 举报
回复
CDilaog DoModal()阻塞当前的消息loop,MSDN:
Dialog boxes are of two types: modal and modeless. A modal dialog box must be closed by the user before the application continues. A modeless dialog box allows the user to display the dialog box and return to another task without canceling or removing the dialog box.

finder_zhang 2010-04-27
  • 打赏
  • 举报
回复
原来你调用了CDialog::OnOK() 这个函数就是用来关窗的,然后返回一个 IDOK 给调用 DoModal() 的代码
尹成 2010-04-27
  • 打赏
  • 举报
回复
DoModal()阻塞了,看看CDialog::OnOK()里面的具体内容
快乐鹦鹉 2010-04-27
  • 打赏
  • 举报
回复
盲目崇拜可不好。
flyskytoday 2010-04-27
  • 打赏
  • 举报
回复
^&^
[Quote=引用 4 楼 happyparrot 的回复:]
你原来的理解没有错,现在终于理解错了。
[/Quote]

在CDialogMsg中代码非常简单,只有一个定时器(倒计时),时间一到就调用CDialog::OnOK()
既然happyparrot都说DoModal是完全阻塞的,那就是完全阻塞,偶比较崇拜权威 呵呵
那现在更不知道原因了,,,也没什么大的问题,只是找不出原因,心里感觉不爽~~
[Quote=引用 5 楼 finder_zhang 的回复:]
DoModal 阻塞整个进程.你闪一下就到了第三行,是不是那个窗因为什么原因而关了?
[/Quote]
finder_zhang 2010-04-27
  • 打赏
  • 举报
回复
DoModal 阻塞整个进程.你闪一下就到了第三行,是不是那个窗因为什么原因而关了?
快乐鹦鹉 2010-04-27
  • 打赏
  • 举报
回复
你原来的理解没有错,现在终于理解错了。
快乐鹦鹉 2010-04-27
  • 打赏
  • 举报
回复
是你的CDialogMsg对话框类做的有问题......
flyskytoday 2010-04-27
  • 打赏
  • 举报
回复
就这三行代码,有问题吗?
对于DoModal的理解很浅
liang_lq 2010-04-27
  • 打赏
  • 举报
回复
DoModal()是阻塞的
“第二行很不稳定,有时能显示一下就关闭,有时一闪就自动转到第三行”,阻塞就阻塞,不阻塞就不阻塞,时而这样,时而那样,这很有可能是你代码的问题

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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