Я создал приложение на C ++, которое должно подключаться к модему через последовательный порт для подачи AT-команд.
Я следовал за следующим ответом: как открыть, читать и писать из последовательного порта в C и это прекрасно работает.
В некоторой точке кода упоминается, что рабочий поток должен находиться в спящем режиме достаточное количество времени, чтобы отправка и чтение символов были согласованными.
usleep ((7 + 25) * 100);
Поскольку я недостаточно знаком с системными вызовами Linux, такими как usleep, я хочу спросить, безопасен ли этот вызов для других процессов Linux, работающих параллельно с моей программой, или я должен использовать метод приостановки выполнения потока по умолчанию в c ++, такой как std? :: this_thread :: sleep_for?
В случае, если я использую usleep, есть ли вещи, за которыми я должен следить?
Единственное, на что вы должны обратить внимание, это на то, что это не будет работать в 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));
Нет способа ответить, безопасно ли это для других процессов. Я не вижу код вашей программы. Это может быть безопасно, это может быть не зависит от того, что вы делаете, и кто еще будет читать или записывать что-то в последовательный порт.
Других решений пока нет …