不断运行表单中的函数(C ++)

时间:2012-01-19 14:30:00

标签: c++ winforms

我目前正在使用两个XBees,其中一个连接到我的电脑,另一个连接在自制的无人机上。飞机上的Xbee不断发送有关飞机的数据,我希望使用我的C ++接口获取数据 - 一个表格(我相信它们也被称为WinForms?)。我的表单中有一个嵌入了Google Earth的webBrowser,我想在GE地图上更新飞机的位置。我知道如何从XBee获取数据,但我只是不知道如何获取收集数据的代码,以便在没有输入的情况下持续执行。

这个项目是其他人放弃了它。我“继承”了这段代码,由于缺乏评论,这对我来说有点混乱。

1 个答案:

答案 0 :(得分:1)

您可以将消息泵更改为使用PeekMessage()而不是通常的GetMessage()。这将允许您处理消息(如果有)或在消息循环空闲时执行其他操作。

使用Win32 API时,它看起来像:

for (bool running = true; running; )
{
    // check for any window messages.  this operation does not block
    // if no messages are available.
    ::MSG message;
    const ::BOOL fetched = ::PeekMessage(&message, 0, 0, 0, PM_REMOVE);
    if (fetched)
    {
        // process window message.
        TranslateMessage(&message);
        DispatchMessage(&message);

        // need to check explicitly for WM_QUIT message, since the "false"
        // return value is already used to mean "there were no messages".
        running = (message.message != WM_QUIT);
    }
    else
    {
        // no messages available, thread is idle.  take time to check
        // auxiliary input source.  if no auxiliary input is available
        // and checking (and processing) the auxiliary inputs is very
        // fast, consider adding an extra ::Sleep() call to avoid hogging
        // up the CPU.
    }
}

对于基于.NET的应用程序,您可能需要查看Application.Idle事件。