usleep vs std :: this_thread :: sleep_for,当在linux串口上写/读时

时间:2018-01-22 14:14:48

标签: c++ linux serial-port usleep

我创建了一个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有哪些东西我应该注意?

1 个答案:

答案 0 :(得分:1)

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

如果您有一个C ++ 11(在Linux上应该是真的)那么您可以使用这个可移植版本(如果您不打算在Windows上运行此代码它可能并不重要) :

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

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