2014-06-11 76 views
0

如果对于有经验的程序员来说这个问题太简单了,我很抱歉。我刚刚开始使用Petzold的基础知识,但在Mathematica和一些C和Labview中有编程经验。窗口程序中的消息循环是否总是“循环”?

我对窗口中的消息循环并不了解,它出现在While循环中,似乎在“正常”C程序中,只要条件保持为真,while循环就会运行,然后程序进入下一个直到程序结束。我想像那些导致程序执行和结束的事件序列,而不是像Labview程序那样时间和序列重要性较低,并且程序可能永远不会结束的哲学,除非用户中断。

据我所知,在Windows中消息循环一直持续下去,除非你中断程序。几乎表现为无限循环,始终处于活动状态。如果消息循环中的真/假条件由GetMessage的布尔结果改变,那么一旦出现错误,程序不会就此结束吗?

在Labview程序中没有强大的时间或操作序列概念,任何条件都可能在任何给定的时刻发生变化,如While循环的真/假条件,然后循环开始执行块的代码或停止没有它意味着该程序以某种方式接近它的结尾。它是如何在Windows中工作?

所有我要说的是,一个程序是这样的:

WinMain() 
{.... 
while(condition) 
{execute code} 
....} 

我认为这将只是执行的代码块,并最终在那里。但是在Windows中,为了执行代码,它保持“等待”条件为真。我相信我没有得到这个权利,这就是为什么我要求任何人为我清除这个机制。

+0

正常的Windows图形用户界面程序在收到消息之前不会执行任何操作。你当然可以得到你的while(){execute();循环进行,在游戏中很常见。但是你必须使用PeekMessage而不是GetMessage。它不能立即停止,它仍然必须在终止前清理。 –

+0

windows入口点的'hidden'部分是'等待事件'的情况。因此,典型的Windows程序处于“昏昏欲睡”的等待状态,直到收到事件。然后,如果该事件是针对此窗口对象发生的,则以其他方式处理该事件,该事件将传递给事件/处理链中的下一个窗口对象。 – user3629249

回答

0

基于条件的操作发生在Windows循环中。通常情况下,这是由于窗口对象(按钮,复选框,单选按钮,列表框中的选择等)发送一条消息的事实。在按钮的情况下,该按钮被按下;在列表框中输入或选择了一些东西。

您需要一个窗口循环,其中包含一个case语句,其中包含事件类型和生成该事件的窗口对象的ID。

没有更详细的代码发布,这很难帮助你。从我对Windows的古老知识中,有一个主要的Windows循环,不断等待事件发生,然后根据发生的事件处理代码。处理退出计划也是这些条件之一。

说“stpp程序”的条件会被捕获,并且写入的代码会跳出主窗口处理循环。这将允许程序退出。