为什么这样不是死循环?

jxhnuaa 2003-09-22 11:06:06
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
... ...
switch(message)
{
case WM_KEYDOWN:
SendMessage (hwnd, KEYDOWN, 0, 0) ;
}
... ...
}
...全文
120 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2003-09-23
  • 打赏
  • 举报
回复
关注。
mahatma_cn 2003-09-23
  • 打赏
  • 举报
回复
假如while(1)是一个没有出口的循环那才是,或者你有出口,但是由于逻辑错误,使得根本没有出口的可能就.....
jxhnuaa 2003-09-23
  • 打赏
  • 举报
回复
这涉及到SendMessage是将消息发送给WndProc还是放到消息队列中,程序我试过不会引起死循环,所以应当是后者。即SendMessage再次将WM_KEYDOWN发送到消息队列中,不知我说的对不对
lygfqy 2003-09-23
  • 打赏
  • 举报
回复
真正的循环当然不在这里而是在while字句中
当然应该避免的是在消息处理中发送给同一窗口相同或相关相互牵连的消息,
这样比较容易引起死循环或者内存越界的情况
superS 2003-09-23
  • 打赏
  • 举报
回复
KEYDOWN和WM_KEYDOWN不同吧?

如果是打错了,那感觉上确实是死循环啊。测试一下就知道了。
Viconia 2003-09-23
  • 打赏
  • 举报
回复
这不就是WINDOWS的消息循环么?当然要不停的循环咯——一直到WM_DESTROY
zswzwy 2003-09-23
  • 打赏
  • 举报
回复
交程系统处理了,SendMessage (hwnd, KEYDOWN, 0, 0) ;

默认应用个return defaultwndproc()
cvip11 2003-09-23
  • 打赏
  • 举报
回复
是死循环,但是你看不出来!
加上这句话,你就知道了。退出程序的时候,你看i=?

case WM_KEYDOWN:
SendMessage (hwnd, KEYDOWN, 0, 0) ;
i++;
Richuen22 2003-09-23
  • 打赏
  • 举报
回复
是啊,这个是死循环的。但它有跳出语句的
case WM_DESTROY:
PostQuitMessage(0);
break;
如果你将此句不要,就跳不出来了。
  • 打赏
  • 举报
回复
有跳出循环的条件啊,如wm_close
Akagg 2003-09-22
  • 打赏
  • 举报
回复
对啊,为何有此一问?

没什么问题啊
tonybaobao 2003-09-22
  • 打赏
  • 举报
回复
为什么会是死循环?
infernalphoenix 2003-09-22
  • 打赏
  • 举报
回复
这是windows的消息处理,他在整个的消息循环中,你仔细看看整个过程,他是有出口的。不会死的。(具体过程我不太清楚,你看看深入浅出MFC)

16,472

社区成员

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

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

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