推荐使用std::this_thread::sleep_for(C++11起),基于和,跨平台、线程安全、支持毫秒/微秒/纳秒等精度;Windows用Sleep(),Linux/macOS用nanosleep();避免system("pause")等非标准方式。

在C++中让程序暂停或休眠,主要靠操作系统提供的睡眠函数,标准C++库本身不直接提供跨平台的sleep函数,但可通过头文件中的std::this_thread::sleep_for实现便携、安全的休眠,推荐优先使用;传统C风格的sleep或usleep等函数则依赖平台,需谨慎处理。
用 std::this_thread::sleep_for(推荐,C++11起)
这是现代C++最标准、最可移植的方式,基于和,支持毫秒、微秒、秒等多种时间单位,且不会阻塞整个进程(只挂起当前线程)。
示例:
#include#include #include int main() { std::cout << "程序开始\n"; std::this_thread::sleep_for(std::chrono::seconds(2)); // 休眠2秒 std::cout << "2秒后继续执行\n"; return 0; }
- 支持任意精度:
milliseconds(500)、microseconds(1000)、nanoseconds(1) - 线程安全,适用于多线程环境
- 无需额外链接库,纯标准C++
Windows平台:Sleep()(大小写敏感)
Windows API提供Sleep()(注意首字母大写),参数单位为毫秒,需包含。
立即学习“C++免费学习笔记(深入)”;
示例:
#include#include int main() { std::cout << "休眠前\n"; Sleep(1500); // 休眠1500毫秒(1.5秒) std::cout << "休眠后\n"; return 0; }
- 仅限Windows,跨平台项目中应避免直接使用
- 传入0时会主动让出当前时间片,但不真正“休眠”
- 若需条件编译,可用
#ifdef _WIN32包裹
Linux/macOS:usleep() 或 nanosleep()
POSIX系统常用usleep()(微秒级,已标记为过时)或更精确稳定的nanosleep()(纳秒级,推荐)。
示例(nanosleep):
#include#include #include int main() { struct timespec ts = {0, 500000000}; // 0秒 + 5亿纳秒 = 0.5秒 nanosleep(&ts, nullptr); std::cout << "休眠结束\n"; return 0; }
-
usleep(500000)等价于休眠500毫秒,但已被POSIX弃用 -
nanosleep更可靠,能处理被信号中断的情况(返回-1并设errno) - 需链接
-lrt(某些旧系统可能需要,现代glibc通常不用)
不推荐的做法:system("pause") 或 getch()
这些不是真正的“休眠”,而是等待用户输入,行为不可控,且严重依赖终端环境,无法用于后台服务或自动化脚本。
例如:
-
system("pause")仅Windows cmd有效,Linux下报错 -
getch()来自,非标准,几乎只在旧Turbo C或部分Windows扩展中存在 - 它们会阻塞并等待键盘事件,不属于时间控制范畴










