Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::asio::Standy\u timer()vs sleep()我应该使用哪一种?_C++_Boost - Fatal编程技术网

C++ boost::asio::Standy\u timer()vs 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,如果

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

1) 使用sleep()

$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:依赖于
    unistd.h
    头,这是非标准的和特定于posix的,这可能是一个问题,也可能不是问题,但需要考虑
  • 缺点:只取整数,这样你就没有选择睡眠亚秒的选项,并且不清楚它的意思是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++14
std::chrono\U文本
Note
std::this\U thread::sleep\U for()
不会被来自系统的信号中断。
sleep()
will.U可以用
5s
代替
std::chrono::seconds(5)
使用C++14
std::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));