C++ boost::asio::Standy\u timer()vs sleep()我应该使用哪一种?
从运行时的角度来看,以下两个程序是相同的,都等待5秒继续。一个使用boost::asio::staid_计时器,另一个使用sleep(),哪个更好 1) 使用sleep()C++ boost::asio::Standy\u timer()vs sleep()我应该使用哪一种?,c++,boost,C++,Boost,从运行时的角度来看,以下两个程序是相同的,都等待5秒继续。一个使用boost::asio::staid_计时器,另一个使用sleep(),哪个更好 1) 使用sleep() $cat b.cpp #包括 #包括 内部主(空) { 标准::cout1) meh:依赖于unistd.h头,这是非标准的和特定于posix的,这可能是一个问题,也可能不是问题,但需要考虑 缺点:只取整数,这样你就没有选择睡眠亚秒的选项,并且不清楚它的意思是5秒,而不是其他单位 (二) meh:依赖于boost,如果
$cat b.cpp
#包括
#包括
内部主(空)
{
标准::cout1)
- meh:依赖于
unistd.h
头,这是非标准的和特定于posix的,这可能是一个问题,也可能不是问题,但需要考虑
- 缺点:只取整数,这样你就没有选择睡眠亚秒的选项,并且不清楚它的意思是5秒,而不是其他单位
(二)
- meh:依赖于boost,如果您已经包含了另一个boost库,这不是一个问题,但是仅仅为了这个目的就太过了
- con:取决于
io\u上下文
- pro:使用
boost::asio::chrono
来定义睡眠时间,这可以为您提供更高的粒度和清晰度
(三)
- pro:标准库函数(C++11及更高版本)
- pro:使用
std::chrono
来定义睡眠时间,这可以让你更精细、更清晰
注意:如果您是C++11之前的版本,boost也有此线程::sleep(用于
1)
- meh:依赖于
头,这是非标准的和特定于posix的,这可能是一个问题,也可能不是问题,但需要考虑unistd.h
- 缺点:只取整数,这样你就没有选择睡眠亚秒的选项,并且不清楚它的意思是5秒,而不是其他单位
- meh:依赖于boost,如果您已经包含了另一个boost库,这不是一个问题,但是仅仅为了这个目的就太过了
- con:取决于
io\u上下文
- pro:使用
来定义睡眠时间,这可以为您提供更高的粒度和清晰度boost::asio::chrono
- pro:标准库函数(C++11及更高版本)
- pro:使用
来定义睡眠时间,这可以让你更精细、更清晰std::chrono
注意:如果您是C++11之前的版本,boost也有
this\u thread::sleep\u for
您考虑过标准
库中的std::this\u thread::sleep\u for
吗?谢谢@kmdreko,我不知道'std::this\u thread::sleep\u for',在看到您的评论之前,这似乎是一个很好的选择。您考虑过std::this\u thread::sleep\u::sleep吗_对于标准
库中的?感谢@kmdreko,在看到您的评论之前,我不知道'std::this\u thread::sleep\u for',这似乎是一个非常好的选择。注意std::this\u thread::sleep\u for()
不会被系统的信号中断。sleep()
will.U可以用5s
代替std::chrono::seconds(5)
和C++14std::chrono\U文本
Notestd::this\U thread::sleep\U for()
不会被来自系统的信号中断。sleep()
will.U可以用5s
代替std::chrono::seconds(5)
使用C++14std::chrono\u文本
$ 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
$ 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
sleep(5)
boost::asio::io_context io;
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
t.wait();
std::this_thread::sleep_for(std::chrono::seconds(5));