usleep vs std::this_thread::sleep_for,当 write/read 在 linux 串行端口上时

usleep vs std::this_thread::sleep_for, when write/read on a linux serial port

我创建了一个 C++ 应用程序,它需要通过串行端口连接到调制解调器才能发出 AT 命令。 我遵循了以下答案:how to open, read, and write from serial port in C 并且效果很好。 在代码的某些地方提到工作线程应该休眠足够的时间,以便字符的发送和读取保持一致。

usleep ((7 + 25) * 100);  

由于我对像usleep这样的linux系统调用还不够熟悉,想问下这个调用对于运行并行的其他linux进程是否安全与我的程序一起使用,还是应该使用 C++ 默认线程暂停执行方法,如 std::this_thread::sleep_for?
如果我使用 usleep,有什么我应该注意的吗?

您唯一需要注意的是,这不适用于 windows(没有 usleep 函数,因为 usleep 是 os 特定的)。您在 post 中提到的代码可能是旧的并且是 C++11 之前的标准。在 C++11 之前没有标准的线程库,所以人们不得不使用 os-specific 的东西。

如果你有 C++11(在 linux 上应该是真的)那么你可以使用这个便携版本(如果你不打算 运行 这个代码在 windows 可能没关系):

#include <chrono>
#include <thread>
...
std::this_thread::sleep_for(std::chrono::microseconds(usec));

无法回答这对其他进程是否安全。我看不到你程序的代码。这可能是安全的,也可能不是,这取决于您在做什么以及还有谁会读取或写入串口。