游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2584|回复: 6

有关WIN32程序消息循环的问题

[复制链接]

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-9-5 15:38:00 | 显示全部楼层 |阅读模式
代码如下:
                if(:eekMessage(&msg, 0, 0, 0, PM_REMOVE))
                {
                        ::TranslateMessage(&msg);
                        :ispatchMessage(&msg);
                }
                else
        {       
                        float currTime  = (float)timeGetTime();
                        float timeDelta = (currTime - lastTime)*0.001f;

                        ptr_display(timeDelta);

                        lastTime = currTime;
        }

我想问的是如果我一直摁住键盘某键,会一直循环
                if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
                {
                        ::TranslateMessage(&msg);
                        ::DispatchMessage(&msg);
                }
                lastTime = currTime;
        这部分而不执行

                else
        {       
                        float currTime  = (float)timeGetTime();
                        float timeDelta = (currTime - lastTime)*0.001f;

                        ptr_display(timeDelta);

                        lastTime = currTime;
        }
么?
上BAIDU也查过只是说PeekMessage是空闲时 为空有消息时为非空。
谢谢了~

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2009-9-7 17:11:00 | 显示全部楼层

Re:有关WIN32程序消息循环的问题

你说的那种情况是不会发生的。

你一直按下一个键在WINDOWS消息里只会出现一次某键被按下的消息。当你松开某键时会出现一次某键被松开的消息。

除非你主动去检查某键是否被按下,否则只会出现上述情况。

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2009-9-8 21:33:00 | 显示全部楼层

Re:有关WIN32程序消息循环的问题

谢谢King回答我这么小白的问题~

0

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2009-9-9 09:13:00 | 显示全部楼层

Re:有关WIN32程序消息循环的问题

貌似不是这样吧。一直按着键盘会产生多个WM_KEYDOWN ,TranslateMessage生成WM_CHAR,松开产生一个WM_KEYUP,所以当一只按着某一个健时,会产生WM_KEYDOWN ->WM_CHAR->WM_KEYDOWN ->WM_CHAR->......->WM_KEYUP序列
当然,并不是不走else的,队列中肯定不会时时刻刻都有数据的,当PeekMessage取不到,自然会走else

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-9-9 09:42:00 | 显示全部楼层

Re:有关WIN32程序消息循环的问题

你一直按着键,,但键盘有键扫描时间,,,这段时间,CPU可以处理N多数据了.

比如键盘每秒扫描28次(正常设置),也只有28次(WM_KEYDOWN)+28次(WM_CHAR)消息,
,CPU每秒可以处理多少呀???Idle时就到else了

2楼的说法不太正确!

楼上正解

14

主题

251

帖子

251

积分

中级会员

Rank: 3Rank: 3

积分
251
发表于 2009-9-22 19:02:00 | 显示全部楼层

Re:有关WIN32程序消息循环的问题

楼上正解

1

主题

30

帖子

46

积分

注册会员

Rank: 2

积分
46
发表于 2009-9-25 00:10:00 | 显示全部楼层

Re:有关WIN32程序消息循环的问题

难道真是传说中的2楼?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-20 12:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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