从运行时间的角度来看,以下两个程序相同,均等待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
答案 0 :(得分:2)
1)
sleep(5)
unistd.h
标头,它是非标准且特定于posix的,可能会或可能不会出现问题,但这是要考虑的问题2)
boost::asio::io_context io;
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
t.wait();
io_context
boost::asio::chrono
定义睡眠时间,可以使您更细腻,更清晰3)
std::this_thread::sleep_for(std::chrono::seconds(5));
std::chrono
定义睡眠时间,可以使您更细腻,更清晰 注意:如果您是C ++ 11之前的版本,boost也有 this_thread::sleep_for