C++实现延迟的方法详解

 更新时间:2022年12月27日 10:24:07   作者:woquNOKIA  
这篇文章主要为大家详细介绍了C++实现延迟的三个方法,文中的示例代码讲解详细,对我们深入了解C++有一定的帮助,感兴趣的小伙伴可以学习一下

1、stl方式

std::this_thread::sleep_for(std::chrono::milliseconds(3000));

或std::this_thread::sleep_for(std::chrono::seconds(3));

(1)std::this_thread::yield (): 线程调用该方法时,主动让出 CPU,并且不参与 CPU 的本次调度,从而让其他线程有机会运行。在后续的调度周期里再参与 CPU 调度。这是主动放弃 CPU 的方法接口。

(2)std::sleep_for ():线程调用该方法时,同样会让出 CPU,并且休眠一段时间,从而让其他线程有机会运行。等到休眠结束时,才参与 CPU 调度。这也是主动放弃 CPU 的方法。

两者的不同很明显,yield () 方法让出 CPU 的时间是不确定的,并且以 CPU 调度时间片为单位。而 sleep_for () 让出 CPU 的时间是固定的。

yield () 的实现依赖于操作系统 CPU 调度策略,在不同的操作系统或者同一个操作系统的不同调度策略下,表现也可能是不同的。

yield简单示例如下

#include <iostream>
#include <thread>

int main(){ 
    std::thread thread1([]{
        while (true) {
            std::cout<<"myThread1"<<std::endl;
            std::this_thread::yield();
            
        }
        
    });
    std::thread thread2([]{
        while (true){ 
            std::cout<<"myThread2"<<std::endl;
            std::this_thread::yield();
            
        }
        
    });
    
    if (thread1.joinable())
        thread1.join();
        
    if (thread2.joinable())
        thread2 .join();
        
return 0;
}

2、用boost实现, 没有用过

boost::this_thread::sleep( boost::posix_time::seconds(3) );

boost::this_thread::sleep( boost::posix_time::milliseconds(3000) );

3、sleep

#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif // _WIN32

void sleepcp(int milliseconds) // 跨平台 sleep 函数
{
    #ifdef _WIN32
        Sleep(milliseconds);//释放cp
    #else
        usleep(milliseconds * 1000);
    #endif // _WIN32
}

知识补充

c++中实现sleep的三种方式(跨平台)

1、stl方式

//by 鸟哥 用stl实现sleep
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
int main(){
    cout<<"sleep前"<<endl;
    std::this_thread::sleep_for(std::chrono::milliseconds(3000));
    cout<<"sleep后"<<endl;
    
}

运行结果:

sleep前
sleep后

2、用boost实现

//by 鸟哥 用boost实现sleep
#include <iostream>
#include <boost/thread/thread.hpp>
using namespace std;
int main()
{
    cout<<"sleep前"<<endl;
    
    boost::this_thread::sleep( boost::posix_time::seconds(3) );
    cout<<"3秒后"<<endl;
    boost::this_thread::sleep( boost::posix_time::milliseconds(3000) );
    cout<<"3秒后"<<endl;
    return 0;
}

运行结果:

sleep前
3秒后
3秒后

3、sleep

//by 鸟哥 实现sleep
#include <iostream>

#ifdef _WIN32
    #include <windows.h>
#else
    #include <unistd.h>
#endif // _WIN32

using namespace std;


void sleepcp(int milliseconds) // 跨平台 sleep 函数
{
    #ifdef _WIN32
        Sleep(milliseconds);
    #else
        usleep(milliseconds * 1000);
    #endif // _WIN32
}
int main()
{
    cout << "sleep前" << endl;
    sleepcp(3000);
    cout << "3秒后" << endl;
}

运行结果:

sleep前
3秒后

到此这篇关于C++实现延迟的方法详解的文章就介绍到这了,更多相关C++延迟内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++学习之智能指针中的unique_ptr与shared_ptr

    C++学习之智能指针中的unique_ptr与shared_ptr

    吃独食的unique_ptr与乐于分享的shared_ptr是C++中常见的两个智能指针,本文主要为大家介绍了这两个指针的使用以及智能指针使用的原因,希望对大家有所帮助
    2023-05-05
  • C++实现LeetCode(100.判断相同树)

    C++实现LeetCode(100.判断相同树)

    这篇文章主要介绍了C++实现LeetCode(100.判断相同树),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Qt中const QString转换 char *可能的坑

    Qt中const QString转换 char *可能的坑

    本文主要介绍了Qt中const QString转换 char *可能的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 简单掌握Linux系统中fork()函数创建子进程的用法

    简单掌握Linux系统中fork()函数创建子进程的用法

    fork()函数只能在类Unix系统下使用,因为需要引入unistd头文件,这里我们就来简单掌握Linux系统中fork()函数创建子进程的用法,需要的朋友可以参考下
    2016-06-06
  • C++ opencv实现几何图形绘制

    C++ opencv实现几何图形绘制

    这篇文章主要为大家介绍了C++ opencv实现几何图形的绘制示例实现代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • C语言编程计算信噪比SNR理解学习

    C语言编程计算信噪比SNR理解学习

    这篇文章主要介绍了C语言编程信噪比SNR计算的理解学习,信噪比,英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO)。是指一个电子设备或者电子系统中信号与噪声的比例
    2021-10-10
  • C++实现LeetCode(148.链表排序)

    C++实现LeetCode(148.链表排序)

    这篇文章主要介绍了C++实现LeetCode(148.链表排序),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 解析在main函数之前调用函数以及对设计的作用详解

    解析在main函数之前调用函数以及对设计的作用详解

    本篇文章是对在main函数之前调用函数以及对设计的作用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 基于C语言实现高级通讯录的示例代码

    基于C语言实现高级通讯录的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言实现一个高级通讯录的功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考一下
    2023-01-01
  • C语言结构及队列实现示例详解

    C语言结构及队列实现示例详解

    这篇文章主要为大家介绍了C语言实现队列示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论