我会尽量描述这个问题。我有一个用 C++ CLI (Visual Studio 2010) 设计的 GUI,带有一些 OpenGL。
我有一个循环,这是完成的(或应该完成的): 1. 从文件中读取行,将其解析为部分 2. 在一段时间内调用等待函数 - 在此期间不采取任何行动(但 GUI 应该是可用的 - 紧急停止按钮等) 3. 一旦时间过去,回到从文件读取行。
我绝对可以使用中断在 C 中的微控制器端执行此操作,但我不知道如何在这里实现相同的目标。我最初的想法是启动计时器,当经过时间的事件处理程序触发时,调用一个函数,该函数又会再次调用读取函数。但我认为这不会很好,因为在读取整个文件结束时,所有这些函数都会返回给它们的调用者。这也可能是一团糟,因为文件在技术上可以有无限多的行(所有这些调用都会耗尽内存)。我的意思基本上是一个巨大的递归函数循环(最好我可以描述它们,A 会调用 B,但 B 会调用 A,然后 A 会再次调用 B。
我找到了这篇文章:Windows 应用程序中的等待窗口,其中包含有关使用委托的建议,但 C++ 不接受匿名委托。我也不知道这是否符合我的要求。时间过去后,以下代码片段将返回到哪里?(我知道这是针对 C# 的,但想法应该是一样的,对吧?)
Timer t = new Timer();
t.Interval = 2000;
t.Tick += delegate { Close(); t.Stop();};
t.Start();
我曾考虑过线程,但我不知道这将如何解决我的问题。我需要等待计时器来触发另一个文件读取实例,这将涉及调用一个函数,导致我无休止的函数调用担心。
还有这个,我看过:http: //msdn.microsoft.com/en-us/library/system.threading.timercallback.aspx,它使用 TimerCallback 。但这会暂停线程直到计时器触发,对吗?这意味着 GUI 将无响应。
虽然我当然想避免反应迟钝,但我可以做到。或者最好将整个文件读取/等待块放入自己的线程并让它延迟它想要的任何东西?
我很感激这个建议。