2011-08-12 4 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, 은 counts per THRESHOLD, count, 디스플레이 throughput으로 표시됩니다.

내 나를 위해 하나 countITER 단계에서 실현 나는에 관련된 특정 장면, 동안 THRESHOLDQueryPerformanceFrequency()을 기반으로합니다. 멀티 기가비트에 대해 언급하지 않는 한, QueryPerformanceCounter()의 영향조차도 무시할 수 있어야합니다.

+0

처리량을 계산하는 방법에 대해 실제로 말하는 것은 아닙니다. 일단 계산 된보고 방법을 찾고 있습니다. 예를 들어 휘발성 멤버 변수에 현재 처리량을 저장하고 다른 스레드가 PostMessage를 사용하여이를 UI에보고하거나 스레드가 호출하는 콜백 함수를 등록하도록 UI를 쿼리하는 것이 좋습니다. – PaulH

관련 문제