在 C++ 中暂停 - 哪种方法?
Pausing in C++ - Which Method?
我注意到在 C++ 中 "pause" 有两种不同的方式。 (虽然我认为它的正确名称是 sleep
ing。)
方法一,(可能是大家最熟悉的方法):
#include <iostream>
#include <unistd.h>
int main() {
std::cout<<"Hello, "<<std::endl;
sleep(1);
std::cout<<"world!\n";
return 0;
}
以及我最先学到的方法:
#include <iostream>
#include <thread>
#include <chrono>
int main() {
std::cout<<"Hello, "<<std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout<<"world!\n";
return 0;
}
我不是在问哪种方式正确,(他们都做同样的事情),而是我在问哪种方式更使用,或"accepted"。另外,在 speed/performance?
这样的事情上,这两者之间有区别吗?
这两种方法的区别在于可移植性:
来自 unistd.h
的 sleep
是 C POSIX 库的一部分,因此仅在提供 POSIX-API(例如 Linux、BSD、...)但例如不在 Windows
std::this_thread::sleep_for
是 C++ 标准库(自 C++11 起)的一部分,因此可用于支持 C++11 和更高版本的所有平台
如果您可以选择使用 std::this_thread::sleep_for
仅依赖 C++11 实现而不依赖系统 API。
主要区别:
std::this_thread::sleep_for
是标准函数 (C++11 起)。 sleep
是 POSIX 标准函数,因此仅在支持 POSIX. 的系统上可用
sleep
参数的单位是秒,而std::this_thread::sleep_for
允许使用任何std::chrono::duration
(尽管用于测量的时钟将有其自己的粒度,可能是不如您指定的时间精确。
std::this_thread::sleep_for
的行为未针对可能中断程序流的信号进行定义。通常,std::this_thread::sleep_for
会像 sleep
一样被过早打断,但没有简单的方法可以找出剩余的休眠时间。 sleep
另一方面 returns 剩余的休眠时间,因此使用休眠循环很容易处理中断,直到返回的休眠时间为零。
我注意到在 C++ 中 "pause" 有两种不同的方式。 (虽然我认为它的正确名称是 sleep
ing。)
方法一,(可能是大家最熟悉的方法):
#include <iostream>
#include <unistd.h>
int main() {
std::cout<<"Hello, "<<std::endl;
sleep(1);
std::cout<<"world!\n";
return 0;
}
以及我最先学到的方法:
#include <iostream>
#include <thread>
#include <chrono>
int main() {
std::cout<<"Hello, "<<std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout<<"world!\n";
return 0;
}
我不是在问哪种方式正确,(他们都做同样的事情),而是我在问哪种方式更使用,或"accepted"。另外,在 speed/performance?
这样的事情上,这两者之间有区别吗?这两种方法的区别在于可移植性:
-
来自
sleep
是 C POSIX 库的一部分,因此仅在提供 POSIX-API(例如 Linux、BSD、...)但例如不在 Windowsstd::this_thread::sleep_for
是 C++ 标准库(自 C++11 起)的一部分,因此可用于支持 C++11 和更高版本的所有平台
unistd.h
的 如果您可以选择使用 std::this_thread::sleep_for
仅依赖 C++11 实现而不依赖系统 API。
主要区别:
std::this_thread::sleep_for
是标准函数 (C++11 起)。sleep
是 POSIX 标准函数,因此仅在支持 POSIX. 的系统上可用
sleep
参数的单位是秒,而std::this_thread::sleep_for
允许使用任何std::chrono::duration
(尽管用于测量的时钟将有其自己的粒度,可能是不如您指定的时间精确。std::this_thread::sleep_for
的行为未针对可能中断程序流的信号进行定义。通常,std::this_thread::sleep_for
会像sleep
一样被过早打断,但没有简单的方法可以找出剩余的休眠时间。sleep
另一方面 returns 剩余的休眠时间,因此使用休眠循环很容易处理中断,直到返回的休眠时间为零。