2013-07-19 3 views
0

Я использую сервера толчок в Wt, и я пытаюсь протолкнуть новую диаграмму с помощью следующего кода:Раздвигая диаграмму на клиенте с помощью Wt

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

но ждет программы до конца, а затем она выводит его в то время как следующий код в той же программе толкает слово «Демокрит каждые 0,5 секунд, как он должен делать:?

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

документация для triggerUpdate упоминает, что «Обновление не является немедленным, и, следовательно, изменения, которые произойдут после того, как этот вызов будет одинаково передан клиенту». Если изменения не являются немедленными, может случиться так, что первая часть кода постоянно пытается перенаправить обновления как так как ваш процессор позволит это, поэтому он никогда не попадает на сервер, потому что новое обновление перезаписывает последнее, и оно снова начинает оживать. Попробуйте добавить boost :: this_thread :: sleep (boost :: posix_time :: миллисекунды (500)); к первому фрагменту кода, чтобы узнать, помогает ли это.

Я сделал проект, когда мне нужно было обновлять график каждую секунду новыми данными и иметь очень схожую настройку с вашей. Я поставил сперва с самого начала, потому что я не хотел, чтобы мой поток boost использовал слишком много CPU.

Кроме того, неясно, находится ли первый фрагмент кода в более крупном цикле, если это так, вы, вероятно, не должны создавать новую диаграмму каждый раз, но создавайте ее перед рукой, а затем обновляете ее данными. Я надеюсь, что это поможет.