2011-08-12 7 views
0

リモートファイルifstreamからローカルファイルofstreamにデータをコピーしているVisual Studio 2008 C++アプリケーションがあります。転送データをUIに報告する

void MyTransferThread() 
{ 
    std::ofstream local_file(/*...*/); 
    std::ifstream remote_file(/*...*/); 

    // an arbitrary block size 
    const size_t buffer_size = 4096; 
    char buffer[ buffer_size ]; 

    while(remote_file) 
    { 
     remote_file.read(buffer, buffer_size); 
     int read = remote_file.gcount(); 
     local_file.write(buffer, read); 
    } 
} 

転送速度に最小限の影響を有しながら、別のUIスレッドに(バイト/秒で)転送の現在のレートを報告するための最良の方法は何ですか?:転送コードは次のように基本的に見えますか

答えて

0

私は毎秒描かれたポリゴンを数えています私の現在のアプリケーションの場合と同じだろう。

  1. すべての反復は++count
  2. すべてのITERの反復
    1. QueryPerformanceCounter()または類似のものと店を作るにin new_time
    2. elapsed = new_time - old_time,old_time = new_time,if elapsed > THRESHOLD,で表される、リセットcount、ディスプレイthroughput

私のための1 countITERステップで実現可能な、私はに関連する特定のシーンである一方、私のTHRESHOLDは、QueryPerformanceFrequency()に基づいています。我々がマルチギガビットについて話している場合を除き、QueryPerformanceCounter()の影響さえ無視してください。

+0

私は実際にスループットをどのように計算するかについては言及していません。私はそれが計算されると、報告方法を探しています。たとえば、現在のスループットを揮発性メンバー変数に格納し、他のスレッドがそれをクエリしたり、PostMessageを使用してUIに報告したり、スレッドが呼び出したコールバック関数をUIに登録させたりする方が良いでしょうか? – PaulH