我正在尝试预测模拟的估计完成时间。在模拟开始时我采取startTime
。在每个周期结束时,我拿timeNow
。经过的时间timeLapsed
通过减去这两个值来计算。平均循环时间(每个循环变化)通过将经过时间除以那时的循环数,即直到那时循环的次数来计算。然后我计算出预计完成时间estimEndTime
,将仍然需要的周期数乘以平均周期时间加到timeNow
。C++ CLI DateTime计算错误
我认为在数据转换中出了点问题,因为estimEndTime
的计算不正确。它的预测方式太短,很快。平均周期时间avgCycleTime
在30-50秒左右计算,看起来正确。周期的尝试nr是20.
我得到一个警告,将int64的周期数(int i)转换为可能丢失数据的long,但由于avgCycleTime
似乎没问题,所以这似乎不是导致错误。
为什么不能正常工作?
代码要领:
long avgCycleTime;
DateTime startTime = DateTime::Now;
f1->textBox9->Text = startTime.ToString("dd/MM/yy HH:mm:ss");
f1->textBox9->Update();
i = 0; // cycle counter
while (i < nCycl)
{
// this is where the simulation occurs
i++;
DateTime timeNow = DateTime::Now;
TimeSpan timeLapsed = timeNow.Subtract(startTime);
avgCycleTime = (timeLapsed.Ticks/i);
DateTime estimEndTime = timeNow.AddTicks(avgCycleTime * (nCycl-i));
f1->textBox10->Text = Convert::ToString(avgCycleTime/10000000); // cycle time in milliseconds
f1->textBox11->Text = estimEndTime.ToString("dd/MM/yy HH:mm:ss");
f1->Refresh();
}
再次stackoverflow来拯救!感谢Ulugbek,它现在工作正常。 – jdelange