使用Wt将图表推送到客户端

时间:2013-07-19 10:02:12

标签: server-push wt

我在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();
        }
}

可能是我的错误?

1 个答案:

答案 0 :(得分:0)

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

我已经完成了一个项目,我需要每秒使用新数据更新图表,并且设置与您的设置非常相似。我从一开始就处于睡眠状态,因为我不希望我的提升线程使用太多的CPU。

另外,目前还不清楚第一段代码是否在一个更大的循环中,如果是,你可能不应该每次都创建一个新的图表,而是先创建它然后用数据更新它。我希望其中一些有帮助。