我正在使用 VC++ 2010 Express。我写了以下例程:
HRESULT DLTimeStampNow::Receive(IMediaSample *pSample)
{
long long fnum, fnum2;
REFERENCE_TIME timeStart=0, timeEnd=10000;
// make this sample available for the next worker-thread call to Transform()
pSample->AddRef();
CRefTime rtStream;
timeStart = 0;
timeEnd = 10000;
pSample->SetTime(&timeStart, &timeEnd);
EnterCriticalSection(&cs);
if (pSampleWaiting != NULL)
((IMediaSample*)pSampleWaiting)->Release();
pSampleWaiting = pSample;
SetEvent(hSampleIsReady);
LeaveCriticalSection(&cs);
return S_OK;
}
这是正在进行的工作的一部分,这就是为什么 fnum 和 rtStream 等变量存在但未使用的原因。
在运行时,VC++ 调试器拒绝在timeStart = 0
or处放置断点timeEnd = 10000
,这很好,只是它也无法初始化它们。调试器显示它们在执行到达时包含垃圾pSample->SetTime(&timeStart, &timeEnd);
。为了解决这个问题,我在变量声明中添加了=0
和。=10000
这行得通,但为什么有必要呢?我猜编译器正在做某种优化,它避免了代码中的常量赋值,但它也忘记了(?)实际上为timeStart
and赋值timeEnd
(除非我在他们的声明语句中初始化它们,如上所述)。
是什么赋予了?