2

我创建了一个 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 有什么我应该注意的吗?

4

1 回答 1

3

您应该注意的唯一一件事是这在 Windows 上不起作用(没有 usleep 功能,因为 usleep 是特定于操作系统的)。您在帖子中提到的代码可能是旧的和 C++11 之前的标准。在 C++11 之前没有标准线程库,所以人们必须使用特定于操作系统的东西。

如果您有 C++11(在 linux 上应该是这样),那么您可以使用这个可移植版本(如果您不打算在 Windows 上运行此代码,那可能没关系):

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

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

于 2018-01-22T14:23:32.573 回答