【发布时间】:2017-10-07 06:27:02
【问题描述】:
这是一个明确的问题: 您能否提供一个从 main(或其自己的类)调用 chrono 并在另一个类中使用的简单示例。或者一个例子的链接。
下面是我摸索着试图更详细地解释我的问题:
我整天都在做这件事,结果总是在同一个地方。 我正在编写一个程序,该程序应该在某些进程完成后输出经过的时间。 我遇到的问题是这些过程发生在不同的类中,我无法让时钟正常工作。 我一直在恢复以时钟为主,但我真的很难让所有东西都融合在一起。所以也许这是一个关于使用类的简单问题。但是有些东西我不理解,我不知道它是什么。
下面是这个计时器的 4 行,我一直在返回并放在我的 main 函数中。它以 x.xxxxxx 格式打印我想要的时钟
auto clock_start = chrono::system_clock::now();
auto clock_now = chrono::system_clock::now();
float currentTime = float(chrono::duration_cast <chrono::microseconds> (clock_now - clock_start).count());
cout << "Elapsed Time: " << currentTime /1000000 << " S \n";
最终, 我有一个结构队列,这些结构会在一个循环中弹出,然后我会对其进行操作。在每次循环迭代结束时打印时,它们需要一个时间戳。 我一生都无法让计时器在循环中给出经过的时间(甚至工作)。
这可能吗?我在 chrono 上阅读了许多线程,当我尝试在我的程序中的多个类/函数中使用计时器时,有些东西对我来说并没有点击。
编辑***
所以这是我在 meta.h 中的当前课程: 这些是 Meta 类中的私有成员
typedef std::chrono::system_clock timer;
timer::time_point currentTime;
timer::time_point startTime;
timer::time_point clock_wait;
timer::time_point clock_check;
timer::time_point elapsed_time; // this is my issue
然后我在 meta.cpp 中开始计时
void Meta::startTimer()
{
startTime = timer::now();
}
这是缺少一些部分的循环,因此我们可以专注于计时器:
void Meta::displaySim()
{
//auto clock_start = chrono::system_clock::now(); THIS IS WHAT I WAS DOING
queue<sData>newFile;
while (!MetaQ.empty())
{
temp = MetaQ.front();
bool wait = true;
float waitTime = float(temp.ncycle)/1000;
while (wait)
{
clock_wait = timer::now();
clock_check = timer::now();
elapsed_time = timer::duration_cast<chrono::milliseconds>(clock_check - clock_wait);
if (elapsed_time.count() > waitTime)
wait = false;
}
cout << "****" << waitTime << "*****"<< endl;
end_time = timer::now();
//Below is the line that is giving me trouble now. I get an error when casting. I don't know how to make duration_cast part of the timer declared in meta.h
float EndTime = float(timer::duration_cast <chrono::milliseconds>(end_time - startTime).count());
cout << fixed << EndTime / 1000000 << " - (" << temp.desc << ')' << temp.cycle << " - " << temp.ncycle << " ms\n";
newFile.push(temp);
MetaQ.pop();
}
MetaQ = newFile;
}
【问题讨论】:
-
“甚至工作”并不是一个很好的问题描述。它没有给你任何结果,还是不是你所期望的?那么,你期待什么,你得到了什么?此外,如果您的循环没有做很多工作,它很可能会在不到一微秒的时间内完成。是这个问题吗?
-
尝试发布代码,尝试从 main(或其自己的类)调用 chrono 并在另一个类中使用的简单示例。那么我毫不怀疑我们可以告诉你为什么这个例子没有按照你的意愿去做。
-
你的问题还不清楚。你得到什么错误?这是一个例外吗?
start_time和end_time有什么价值?毕竟它们是整数,请检查您的调试器 -
不应该
clock_wait = timer::now();在循环之前而不是里面?看起来像一个无限循环 -
它告诉我 duration_cast 不是 Meta::timer 的成员