gpt4 book ai didi

c++ - boost::asio::steady_timer() vs sleep() 我应该使用哪一个?

转载 作者:行者123 更新时间:2023-11-28 01:27:34 25 4
gpt4 key购买 nike

从运行时的角度来看,以下两个程序是相同的,都等待 5 秒以继续。一个用boost::asio::steady_timer,一个用sleep(),哪个更好?

1) 使用 sleep ()

$ cat b.cpp
#include <iostream>
#include <unistd.h>

int main(void)
{
std::cout << "start" << std::endl;
sleep(5);
std::cout << "end" << std::endl;
}

$ g++ b.cpp && ./a.out
start
end

2) 使用 boost::asio::steady_timer

$ cat c.cpp
#include <iostream>
#include <boost/asio.hpp>

int main(void)
{
std::cout << "start" << std::endl;
boost::asio::io_context io;
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
t.wait();
std::cout << "end" << std::endl;
return 0;
}

$ g++ c.cpp -lpthread -lboost_system && ./a.out
start
end

最佳答案

1)

sleep(5)
  • meh:依赖于 unistd.h header ,它是非标准的和特定于 posix 的,这可能是也可能不是问题,但需要考虑
  • con:只接受整数,因此您无法选择亚秒级休眠,并且可能不清楚它是指 5 ,而不是其他一些单位。

2)

boost::asio::io_context io;
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
t.wait();
  • meh:依赖于 boost,如果您已经包含另一个 boost 库,这不是问题,但仅仅为了这个目的就太过分了
  • 缺点:取决于io_context
  • pro:使用 boost::asio::chrono 来定义 sleep 时间,这可以让您更精细、更清晰

3)

std::this_thread::sleep_for(std::chrono::seconds(5));
  • pro:标准库函数(C++11 及更高版本)
  • pro:使用 std::chrono 定义 sleep 时间,这可以让您更精细、更清晰

注意:如果你是 C++11 之前的版本,boost 也有 this_thread::sleep_for

关于c++ - boost::asio::steady_timer() vs sleep() 我应该使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53111705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com