C++ 在指定的持续时间内运行函数:C++;与<;chrono>;
我需要实现一个函数,该函数应该在指定的持续时间内执行指定的任务,并将其作为参数C++ 在指定的持续时间内运行函数:C++;与<;chrono>;,c++,c++11,chrono,C++,C++11,Chrono,我需要实现一个函数,该函数应该在指定的持续时间内执行指定的任务,并将其作为参数(std::chrono::millides)传递给它 我已经想出了代码: void Run(std::chrono::milliseconds ms) { std::chrono::time_point<std::chrono::system_clock> start, end; start = std::chrono::system_clock::now(); std::chro
(std::chrono::millides)
传递给它
我已经想出了代码:
void Run(std::chrono::milliseconds ms)
{
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
while (elapsed_seconds <= (ms / 1000))
{
std::cout << "Running" << std::endl;
end = std::chrono::system_clock::now();
elapsed_seconds = end - start;
}
}
int main()
{
{
std::chrono::milliseconds ms(30000);
Run(ms);
system("Pause");
}
void运行(std::chrono::毫秒)
{
std::chrono::时间点开始、结束;
开始=标准::时钟::系统时钟::现在();
std::chrono::持续时间(秒)=结束-开始;
而(已用_秒您的问题是您执行的数据操作
您是否尝试打印“已用秒数”
如中所述,您必须执行以下操作:
std::chrono::duration_cast<std::chrono::microseconds>(end - start).count()
std::chrono::duration\u cast(结束-开始).count()
顺便说一句,你需要什么也可以用std::future:按建议等待。你真正需要的是知道结束点,然后循环直到达到该点:
#include <chrono>
void Run(std::chrono::milliseconds ms)
{
std::chrono::time_point<std::chrono::system_clock> end;
end = std::chrono::system_clock::now() + ms; // this is the end point
while(std::chrono::system_clock::now() < end) // still less than the end?
{
std::cout << "Running" << std::endl;
}
}
int main()
{
std::chrono::milliseconds ms(3000);
Run(ms);
system("Pause");
}
#包括
无效运行(标准::计时::毫秒-毫秒)
{
std::chrono::时间点结束;
end=std::chrono::system_clock::now()+ms;//这是终点
while(std::chrono::system_clock::now() std::cout删除变量end
。无论如何都无法初始化它
直接用std::chrono::system\u clock::now()替换它的所有用途
使用std::chrono::microsides
作为您的已用时间
——为什么不必要地转换为秒
void Run(std::chrono::milliseconds ms)
{
std::chrono::time_point<std::chrono::system_clock> start
= std::chrono::system_clock::now();
auto elapsed_time = [start]()->std::chrono::milliseconds
{
return std::chrono::system_clock::now() - start;
};
while (elapsed_time() <= ms) {
std::cout << "Running" << std::endl;
}
}
void运行(std::chrono::毫秒)
{
std::chrono::时间点开始
=std::chrono::system_clock::now();
自动运行时间=[start]()->std::chrono::毫秒
{
返回std::chrono::system_clock::now()-start;
};
while(经过的时间)std::future::wait_for
或std::future::wait_until
可能更合适?end没有价值!这可能是问题的根源吗?@mans还有另一个很好的理由不在每行声明一个以上的变量,总是初始化变量。@Yakk经过的秒数以秒为单位显示了我引用的示例中的值d、 无论如何,我试着用std::future::wait_for
ms/1000
是30秒,而不是你想象中的30秒。而经过的秒数是一个持续时间,而不是秒数。给它们一些不太容易引起误解的名称,比如经过的
和总计
(不指定单位,因为持续时间
的要点是为您处理单位),并在经过
时运行。