在特定时间后调用函数的推荐或最精确的方法是什么?

What is the recommended or most precise way, to call a function after a specific time?

我写了一个小程序来启动和记录相机的立体设置。我想记录一个 100ms 的序列。问题是:我不知道如何以尽可能高的精度为函数计时。我发现 header <unistd.h> 包含函数 usleep ,它可以暂停指定微秒间隔的执行。所以在我的程序中我正在做这样的事情:

left_camera.start_recording();
right_camera.start_recording();
usleep(100000);
left_camera.stop_recording();
right_camera.stop_recording();

是否有更好的方法来确保两个函数之间的精确计时?

你也可以使用 std::this_thread::sleep_for (C++11)

#include <chrono>
#include <thread>

int main()
{
    std::this_thread::sleep_for(std::chrono::nanoseconds(500));
}

睡眠并不是实现计时器的更好方法。您可以使用 c++ boost 库中的 asio 异步计时器功能。您可以创建计时器,这将在计时器到期后调用注册函数

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

void func(const boost::system::error_code&)
{
    std::cout << "in func" << std::endl;
}

int main()
{
  boost::asio::io_service io;
  boost::asio::deadline_timer t(io, boost::posix_time::seconds(0.1));
  t.async_wait(&func);
  io.run();
  return 0;
}

Link libboost_system 编译时的库
更多信息请参考:

https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/tutorial.html