我在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();
}
}
可能是我的错误?
答案 0 :(得分:0)
triggerUpdate的文档提到“更新不是立即的,因此在此调用之后发生的更改将同样推送到客户端。”如果更改不是立即的,则可能是第一段代码不断尝试按照CPU允许的速度推送更新,因此它永远不会到达服务器,因为新的更新会覆盖最后一个并且它会再次开始等待。尝试添加boost :: this_thread :: sleep(boost :: posix_time :: milliseconds(500));到第一段代码,看看是否有帮助。
我已经完成了一个项目,我需要每秒使用新数据更新图表,并且设置与您的设置非常相似。我从一开始就处于睡眠状态,因为我不希望我的提升线程使用太多的CPU。
另外,目前还不清楚第一段代码是否在一个更大的循环中,如果是,你可能不应该每次都创建一个新的图表,而是先创建它然后用数据更新它。我希望其中一些有帮助。