usleep vs std :: this_thread :: sleep_for, когда запись / чтение на последовательном порту Linux

Я создал приложение на C ++, которое должно подключаться к модему через последовательный порт для подачи AT-команд.
Я следовал за следующим ответом: как открыть, читать и писать из последовательного порта в C и это прекрасно работает.
В некоторой точке кода упоминается, что рабочий поток должен находиться в спящем режиме достаточное количество времени, чтобы отправка и чтение символов были согласованными.

usleep ((7 + 25) * 100);

Поскольку я недостаточно знаком с системными вызовами Linux, такими как usleep, я хочу спросить, безопасен ли этот вызов для других процессов Linux, работающих параллельно с моей программой, или я должен использовать метод приостановки выполнения потока по умолчанию в c ++, такой как std? :: this_thread :: sleep_for?
В случае, если я использую usleep, есть ли вещи, за которыми я должен следить?

0

Решение

Единственное, на что вы должны обратить внимание, это на то, что это не будет работать в Windows (нет функции usleep, поскольку usleep зависит от ОС). Вероятно, код, который вы упомянули в своем посте, старый и до стандарта C ++ 11. До C ++ 11 не было стандартной библиотеки потоков, поэтому люди должны использовать специфичные для ОС вещи.

Если у вас есть C ++ 11 (что в linux должно быть true), вы можете использовать эту портативную версию (если вы не планируете запускать этот код в Windows, это, вероятно, не имеет значения):

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

Нет способа ответить, безопасно ли это для других процессов. Я не вижу код вашей программы. Это может быть безопасно, это может быть не зависит от того, что вы делаете, и кто еще будет читать или записывать что-то в последовательный порт.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]