如果对于有经验的程序员来说这个问题太简单了,我很抱歉。我刚刚开始使用Petzold的基础知识,但在Mathematica和一些C和Labview中有编程经验。窗口程序中的消息循环是否总是“循环”?
我对窗口中的消息循环并不了解,它出现在While循环中,似乎在“正常”C程序中,只要条件保持为真,while循环就会运行,然后程序进入下一个直到程序结束。我想像那些导致程序执行和结束的事件序列,而不是像Labview程序那样时间和序列重要性较低,并且程序可能永远不会结束的哲学,除非用户中断。
据我所知,在Windows中消息循环一直持续下去,除非你中断程序。几乎表现为无限循环,始终处于活动状态。如果消息循环中的真/假条件由GetMessage的布尔结果改变,那么一旦出现错误,程序不会就此结束吗?
在Labview程序中没有强大的时间或操作序列概念,任何条件都可能在任何给定的时刻发生变化,如While循环的真/假条件,然后循环开始执行块的代码或停止没有它意味着该程序以某种方式接近它的结尾。它是如何在Windows中工作?
所有我要说的是,一个程序是这样的:
WinMain()
{....
while(condition)
{execute code}
....}
我认为这将只是执行的代码块,并最终在那里。但是在Windows中,为了执行代码,它保持“等待”条件为真。我相信我没有得到这个权利,这就是为什么我要求任何人为我清除这个机制。
正常的Windows图形用户界面程序在收到消息之前不会执行任何操作。你当然可以得到你的while(){execute();循环进行,在游戏中很常见。但是你必须使用PeekMessage而不是GetMessage。它不能立即停止,它仍然必须在终止前清理。 –
windows入口点的'hidden'部分是'等待事件'的情况。因此,典型的Windows程序处于“昏昏欲睡”的等待状态,直到收到事件。然后,如果该事件是针对此窗口对象发生的,则以其他方式处理该事件,该事件将传递给事件/处理链中的下一个窗口对象。 – user3629249