다음을 통해 공유


작업 진행률 확인

BITS는 각 작업에 대한 진행률 정보를 유지 관리합니다. 진행률 정보를 사용하여 전송된 바이트 및 파일 수를 확인합니다.

작업에 대한 진행률 정보를 검색하려면 다음 예제와 같이 IBackgroundCopyJob::GetProgress 메서드를 호출합니다. 이 예제에서는 IBackgroundCopyJob 인터페이스 포인터가 유효하다고 가정합니다.

#define PROGRESS_COMPLETE_LEN 50

HRESULT hr;
IBackgroundCopyJob* pJob;
WCHAR szProgressComplete[PROGRESS_COMPLETE_LEN+1];
BG_JOB_PROGRESS Progress;

hr = pJob->GetProgress(&Progress); 
if (FAILED(hr))
{
  //Handle error
}

//Because the BytesTotal member can be 0 or BG_SIZE_UNKNOWN, you may not be able 
//to determine a percentage value to display, such as 57%. It is best to display a 
//string that shows the number of bytes transferred. For example, "123456 of 
//999999" or "123456 of Unknown".
if (BG_SIZE_UNKNOWN == Progress.BytesTotal)
{
  StringCchPrintf(szProgressComplete, PROGRESS_COMPLETE_LEN+1, L"%I64d of Unknown", 
     Progress.BytesTransferred);
}
else
{
  StringCchPrintf(szProgressComplete, PROGRESS_COMPLETE_LEN+1, L"%I64d of %I64d", 
     Progress.BytesTransferred, Progress.BytesTotal); 
}

업로드 회신 작업의 회신 부분에 대한 진행률 정보를 검색하려면 다음 예제와 같이 IBackgroundCopyJob2::GetReplyProgress 메서드를 호출합니다. 이 예제에서는 IBackgroundCopyJob 인터페이스 포인터가 유효하다고 가정합니다.

#define REPLY_COMPLETE_LEN 4

HRESULT hr;
IBackgroundCopyJob* pJob;
IBackgroundCopyJob2* pJob2 = NULL;
WCHAR szReplyComplete[REPLY_COMPLETE_LEN+1];
BG_JOB_REPLY_PROGRESS Progress;

pJob->QueryInterface(__uuidof(IBackgroundCopyJob2), (void**)&pJob2);
hr = pJob2->GetReplyProgress(&Progress); 
if (SUCCEEDED(hr))
{
  if (0 == Progress.BytesTotal) //The job type is not BG_JOB_TYPE_UPLOAD_REPLY
  {
    //Logic to deal with this case  
  }
  else if (BG_SIZE_UNKNOWN == Progress.BytesTotal) //The reply has not begun
  {
    StringCchPrintf(szReplyComplete, REPLY_COMPLETE_LEN+1, L"0%%");
  }
  else
  {
    StringCchPrintf(szReplyComplete, REPLY_COMPLETE_LEN+1 L"%I64d%%",
       100*Progress.BytesTransferred/Progress.BytesTotal); 
  }
}

파일에는 진행률 정보도 포함됩니다. 진행률 정보를 검색하려면 IBackgroundCopyFile::GetProgress 메서드를 사용합니다. 작업의 파일을 검색하는 방법에 대한 자세한 내용은 작업 에서 파일 열거를 참조하세요.