0

我在 Wt 中使用服务器推送,并尝试使用以下代码推送新图表:

Wt::WApplication::UpdateLock uiLock(app);
    if (uiLock){
        chart_ste = new ScatterPlotExample(this,10*asf.get_outputSamplingRate());
        app->triggerUpdate();
    }

但它会等待程序结束然后打印它,而同一程序中的以下代码按应有的方式每 0.5 秒推送一次“Demokritus”:

for (int i=0; i<10; i++)
{
        boost::this_thread::sleep(boost::posix_time::milliseconds(500));
        Wt::WApplication::UpdateLock uiLock(app);
        if (uiLock) {

            showFileName = new WText(this);
            showFileName->setText(boost::lexical_cast<std::string>("Demokritus"));
            app->triggerUpdate();
        }
}

我的错误可能是什么?

4

1 回答 1

0

triggerUpdate 的文档提到“更新不是立即的,因此在此调用之后发生的更改将同样被推送到客户端。” 如果更改不是即时的,则可能是第一段代码不断尝试以您的 CPU 允许的速度推送更新,因此它永远不会到达服务器,因为新的更新会覆盖最后一个并再次开始等待。尝试添加 boost::this_thread::sleep(boost::posix_time::milliseconds(500)); 到第一段代码,看看是否有帮助。

我曾经做过一个项目,我需要每秒用新数据更新图表,并且设置与您的设置非常相似。我从一开始就进入睡眠状态,因为我不希望我的 boost 线程使用过多的 CPU。

此外,尚不清楚第一段代码是否处于更大的循环中,如果是,您可能不应该每次都制作新图表,而是事先创建它,然后用数据更新它。我希望这会有所帮助。

于 2013-07-24T11:47:43.567 回答