C++ 如果某个函数运行时间较长(少于一个周期),我如何定期执行该函数

C++ 如果某个函数运行时间较长(少于一个周期),我如何定期执行该函数,c++,C++,我想每秒运行一次函数,例如func()。但是,func()的运行时间约为500毫秒。我如何才能做到这一点?我知道如果函数的运行时间很短,我可以在每次执行后在func()和sleep()中编写一个while循环,持续1秒。但现在,运行时间很长。如何确保func()每秒运行1次?谢谢。你可以: 在开始时间中取当前时间 履行你的职责 在结束时间中取当前时间 等待(1秒+开始时间-结束时间) 这样,您可以每秒钟可靠地执行任务。如果任务花费较少的时间,您将等待更长的时间,反之亦然。但是请注意,这假设您的任

我想每秒运行一次函数,例如func()。但是,func()的运行时间约为500毫秒。我如何才能做到这一点?我知道如果函数的运行时间很短,我可以在每次执行后在func()和sleep()中编写一个while循环,持续1秒。但现在,运行时间很长。如何确保func()每秒运行1次?谢谢。

你可以:

  • 在开始时间中取当前时间
  • 履行你的职责
  • 在结束时间中取当前时间
  • 等待(1秒+开始时间-结束时间)
  • 这样,您可以每秒钟可靠地执行任务。如果任务花费较少的时间,您将等待更长的时间,反之亦然。但是请注意,这假设您的任务花费的时间始终小于1秒。执行。在实际代码中,您希望在sleep语句之前检查它

    实现细节取决于平台

    请注意,由于计算步骤4所需的时间,使用此方法仍然会导致较小的漂移。更准确的替代方法是以1秒的整数倍进行同步。这样,超过1000个周期,你就不会漂移

    这取决于您需要的准确度。

    您可以:

  • 在开始时间中取当前时间
  • 履行你的职责
  • 在结束时间中取当前时间
  • 等待(1秒+开始时间-结束时间)
  • 这样,您可以每秒钟可靠地执行任务。如果任务花费较少的时间,您将等待更长的时间,反之亦然。但是请注意,这假设您的任务花费的时间始终小于1秒。执行。在实际代码中,您希望在sleep语句之前检查它

    实现细节取决于平台

    请注意,由于计算步骤4所需的时间,使用此方法仍然会导致较小的漂移。更准确的替代方法是以1秒的整数倍进行同步。这样,超过1000个周期,你就不会漂移


    这取决于您需要的精度级别。

    如果您想要一个简单易懂的解决方案,您可以获取函数首次运行前的时间,并将其保存在某个变量(开始时间)中。创建存储下一个重复编号的重复索引计数变量(重复编号)。然后你可以这样做:

    1) next_run_time = ++repeat_number*1sec + start_time;
    2) func();
    3) wait_time = next_run_time - current_time;
    4) sleep(wait_time)
    5) goto 1;
    
    这种方法禁止在每次迭代中累积时间误差


    但对于真正的应用程序,您应该找到一些事件框架或库。

    如果您想要一个简单、易于编码的解决方案,您可以获取函数首次运行之前的时间,并将其保存在某个变量(start\u time)中。创建存储下一个重复编号的重复索引计数变量(重复编号)。然后你可以这样做:

    1) next_run_time = ++repeat_number*1sec + start_time;
    2) func();
    3) wait_time = next_run_time - current_time;
    4) sleep(wait_time)
    5) goto 1;
    
    这种方法禁止在每次迭代中累积时间误差


    但对于真正的应用程序,您应该找到一些事件框架或库。

    Windows或linux?你希望你的代码是可移植的吗?你可以使用定时器,但在windows上我推荐windows或linux?你希望你的代码是可移植的吗?您可以使用计时器,但在windows上我建议您使用,谢谢。你能给我更多关于整数同步的细节吗?谢谢,谢谢。你能给我更多关于整数同步的细节吗?谢谢,谢谢。我应该何时获取当前时间?当前时间是计算等待时间时的当前时间。=)我想我明白了。那么下一次运行时间是准确的时间,对吗?是的。下次运行时间始终是运行func()的“理想”计划时间。因此,在每次迭代中,您将与计划的时间同步。每个迭代错误都只是sleep()的系统错误和您编写一些代码来计算当前时间的时间。这个错误不会在每次迭代中累积,因为下一次运行时间并不依赖于每次迭代中的任何随机性。谢谢。我应该何时获取当前时间?当前时间是计算等待时间时的当前时间。=)我想我明白了。那么下一次运行时间是准确的时间,对吗?是的。下次运行时间始终是运行func()的“理想”计划时间。因此,在每次迭代中,您将与计划的时间同步。每个迭代错误都只是sleep()的系统错误和您编写一些代码来计算当前时间的时间。这个错误不会在每次迭代中累积,因为下一次运行时间并不依赖于每次迭代中的任何随机因素。