文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-12-27 12:00

关注

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++延迟内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯