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秒。而
经过的秒数是一个持续时间,而不是秒数。给它们一些不太容易引起误解的名称,比如
经过的
总计
(不指定单位,因为
持续时间
的要点是为您处理单位),并在
经过
时运行。