mfc中SetWindowText()导致程序卡死

alxm 2015-12-23 10:49:59

void CMFCApplication3Dlg::OnBnClickedButton1()
{
CString cstr=CString("hello");
GetDlgItem(IDC_EDIT1)->SetWindowText(cstr);
while (true){


}
// TODO: 在此添加控件通知处理程序代码
}


建一个含有一个button和一个edit的对话框程序,button函数如上,运行为什么会导致程序无响应,且连“hello”都无法输出。
...全文
702 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxiaofeng1021 2015-12-24
  • 打赏
  • 举报
回复
后面有个 while(true)~~~~
zhouxiaofeng1021 2015-12-24
  • 打赏
  • 举报
回复
后面有个 while(true)~~~~
zhouxiaofeng1021 2015-12-24
  • 打赏
  • 举报
回复
后面有个 while(true)~~~~
忘世麒麟 2015-12-24
  • 打赏
  • 举报
回复
这种错误仔细检查一遍就出来了啊。浪费40分干嘛
忘世麒麟 2015-12-24
  • 打赏
  • 举报
回复
不卡死都有鬼出
忘世麒麟 2015-12-24
  • 打赏
  • 举报
回复
不卡死都有鬼出
谁学逆向工程 2015-12-24
  • 打赏
  • 举报
回复
死循环留着干啥呢
sdghchj 2015-12-24
  • 打赏
  • 举报
回复
引用 12 楼 u014602478 的回复:
[quote=引用 11 楼 sdghchj 的回复:] [quote=引用 10 楼 u014602478 的回复:] 实际是我在while中不断接收服务器发来的消息,然后输出,在while中根据服务器发来的消息有判断何时break的语句,为什么SetWindowText()无法输出到文本框呢
这个要弄清分window的消息机制才行,从sdk学起更好理解,直接进入MFC可不好懂。 SetWindowText等等一系列方法虽然从表面上看是立即更新界面,但实际上是延迟刷新,即要等到你的事件执行完成后消息队列为空时,系统自动给界面发一个异步WM_PAINT事件直接执行MFC默认的刷新过程。如果你的处理界面事件过程中卡死不返回,那么WM_PAINT消息就无法发送更无法执行,自然不会刷新界面。[/quote] 那有没有方法强制立即刷新[/quote] 你可以自己立即重绘,可我觉得这更麻烦,而且严重打乱MFC框架机制。MFC处理网络事件,多线程才是首选。
Minikinfish 2015-12-24
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/391881562 这里怎么还有啊,
jiht594 2015-12-24
  • 打赏
  • 举报
回复
引用 12 楼 u014602478 的回复:
[quote=引用 11 楼 sdghchj 的回复:] [quote=引用 10 楼 u014602478 的回复:] 实际是我在while中不断接收服务器发来的消息,然后输出,在while中根据服务器发来的消息有判断何时break的语句,为什么SetWindowText()无法输出到文本框呢
这个要弄清分window的消息机制才行,从sdk学起更好理解,直接进入MFC可不好懂。 SetWindowText等等一系列方法虽然从表面上看是立即更新界面,但实际上是延迟刷新,即要等到你的事件执行完成后消息队列为空时,系统自动给界面发一个异步WM_PAINT事件直接执行MFC默认的刷新过程。如果你的处理界面事件过程中卡死不返回,那么WM_PAINT消息就无法发送更无法执行,自然不会刷新界面。[/quote] 那有没有方法强制立即刷新[/quote] 试试set之后UpdateWindow 其实while新开一个线程就好了
alxm 2015-12-24
  • 打赏
  • 举报
回复
引用 11 楼 sdghchj 的回复:
[quote=引用 10 楼 u014602478 的回复:] 实际是我在while中不断接收服务器发来的消息,然后输出,在while中根据服务器发来的消息有判断何时break的语句,为什么SetWindowText()无法输出到文本框呢
这个要弄清分window的消息机制才行,从sdk学起更好理解,直接进入MFC可不好懂。 SetWindowText等等一系列方法虽然从表面上看是立即更新界面,但实际上是延迟刷新,即要等到你的事件执行完成后消息队列为空时,系统自动给界面发一个异步WM_PAINT事件直接执行MFC默认的刷新过程。如果你的处理界面事件过程中卡死不返回,那么WM_PAINT消息就无法发送更无法执行,自然不会刷新界面。[/quote] 那有没有方法强制立即刷新
sdghchj 2015-12-24
  • 打赏
  • 举报
回复
引用 10 楼 u014602478 的回复:
实际是我在while中不断接收服务器发来的消息,然后输出,在while中根据服务器发来的消息有判断何时break的语句,为什么SetWindowText()无法输出到文本框呢
这个要弄清分window的消息机制才行,从sdk学起更好理解,直接进入MFC可不好懂。 SetWindowText等等一系列方法虽然从表面上看是立即更新界面,但实际上是延迟刷新,即要等到你的事件执行完成后消息队列为空时,系统自动给界面发一个异步WM_PAINT事件直接执行MFC默认的刷新过程。如果你的处理界面事件过程中卡死不返回,那么WM_PAINT消息就无法发送更无法执行,自然不会刷新界面。
alxm 2015-12-24
  • 打赏
  • 举报
回复
实际是我在while中不断接收服务器发来的消息,然后输出,在while中根据服务器发来的消息有判断何时break的语句,为什么SetWindowText()无法输出到文本框呢
paschen 2015-12-23
  • 打赏
  • 举报
回复
你后面有个while(true)啊
paschen 2015-12-23
  • 打赏
  • 举报
回复
你后面有个while(true)啊

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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