0

Wt でサーバー プッシュを使用しており、次のコードで新しいチャートをプッシュしようとしています。

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

ただし、プログラムが終了するのを待ってから出力しますが、同じプログラム内の次のコードは、「Demokritus」という単語を 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();
        }
}

私の間違いは何ですか?

4

1 に答える 1

0

triggerUpdate のドキュメントには、「更新は即時ではないため、この呼び出しの後に発生する変更はクライアントに等しくプッシュされる」と記載されています。変更がすぐに反映されない場合、コードの最初の部分が CPU が許す限りの速度で継続的に更新をプッシュしようとする可能性があります。そのため、新しい更新が最後の更新を上書きし、再び待機を開始するため、サーバーに到達することはありません。boost::this_thread::sleep(boost::posix_time::milliseconds(500)); を追加してみてください。それが役立つかどうかを確認するために、コードの最初の部分に移動します。

新しいデータで毎秒チャートを更新する必要があり、あなたの設定と非常によく似たプロジェクトを一度行ったことがあります。ブースト スレッドが CPU を使いすぎないように、最初からスリープ状態にしました。

また、コードの最初の部分がより大きなループにあるかどうかは不明です。ループしている場合は、毎回新しいグラフを作成するのではなく、事前に作成してからデータで更新する必要があります。これがいくつか役立つことを願っています。

于 2013-07-24T11:47:43.567 に答える