vs2015 MFC的BnClicked内部执行顺序问题

哇哦~ 2018-09-06 07:50:02
我在BnClicked事件函数内部调用了几个函数,例如,在第3个调用的函数里有Sleep函数,而运行起来却把第1,第2个函数也给暂停了,新手,不太懂,请指教(代码太多,自己又写的太乱,不方便拿出来,见谅)
...全文
135 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
哇哦~ 2018-09-06
  • 打赏
  • 举报
回复
十分感谢各位的帮忙,现在弄好了
算什么男人000 2018-09-06
  • 打赏
  • 举报
回复
引用 7 楼 schlafenhamster 的回复:
或者· 使用· 定时器· SetTimer(1,1000,0)
OnTimer 中
KillTimer(1);
m_btn2.SetBitmap(hbmp);

对的,sleep阻塞了消息队列,sleep前面没有及时刷新处理,要等sleep时间过了,两个按钮肯定是同一时间出图。
算什么男人000 2018-09-06
  • 打赏
  • 举报
回复
引用 5 楼 zgl7903 的回复:
因为Sleep阻塞了消息队列, RedrawWindow 先刷新下
m_btn1.SetBitmap(hbmp); m_btn1.RedrawWindow(); Sleep()

或者可以尝试下用定时器来完成, 这样不会有卡顿的感觉
对的,sleep阻塞了消息队列,sleep没有没有及时刷新处理,要等sleep时间过了,两个按钮肯定是同一时间出图。
schlafenhamster 2018-09-06
  • 打赏
  • 举报
回复
或者· 使用· 定时器· SetTimer(1,1000,0)
OnTimer 中
KillTimer(1);
m_btn2.SetBitmap(hbmp);
schlafenhamster 2018-09-06
  • 打赏
  • 举报
回复
m_btn1.SetBitmap(hbmp);// 按钮 1 需要 重绘,(RedrawWindow 先刷新下)
Sleep(1000);// 可是 sleep 却 使 程序 切换到 别的程序 , 重绘消息 被 阻塞 在 消息 队列 中
zgl7903 2018-09-06
  • 打赏
  • 举报
回复
因为Sleep阻塞了消息队列, RedrawWindow 先刷新下
m_btn1.SetBitmap(hbmp); m_btn1.RedrawWindow(); Sleep()

或者可以尝试下用定时器来完成, 这样不会有卡顿的感觉
哇哦~ 2018-09-06
  • 打赏
  • 举报
回复
代码大概是这样子,我想鼠标点击后直接设置按钮1的位图,过1s再设置按钮2的位图,可结果是两个按钮同时延迟1s才设置

void C魔幻牌MFC2Dlg::OnBnClickedButton1()
{
m_btn1.SetBitmap(hbmp);
Sleep(1000);
m_btn2.SetBitmap(hbmp);
}

zgl7903 2018-09-06
  • 打赏
  • 举报
回复
消息响应函数中一般不建议Sleep等阻塞操作, 可以把长时间操作启动一个后台线程来处理
算什么男人000 2018-09-06
  • 打赏
  • 举报
回复
不然就自行打断点调试
算什么男人000 2018-09-06
  • 打赏
  • 举报
回复
把有问题的代码贴出来

16,473

社区成员

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

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

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