C++实现延迟的方法详解
作者:woquNOKIA
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++延迟内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!