Для организации работы с несколькими COM-портами одновременно в C++ можно воспользоваться механизмом многопоточности. В данном случае каждый COM-порт будет обрабатываться в отдельном потоке, что позволит выполнять операции с портами параллельно.
Ниже приведен пример кода на C++, демонстрирующий создание и работу с несколькими COM-портами одновременно:
#include <iostream> #include <Windows.h> #include <thread> #include <vector> void comPortWorker(const std::string& portName) { HANDLE hCom = CreateFile(portName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hCom == INVALID_HANDLE_VALUE) { std::cerr << "Error opening COM port: " << portName << std::endl; return; } // Далее можно выполнять операции с COM-портом, например, чтение и запись данных CloseHandle(hCom); } int main() { std::vector<std::string> portNames = {"COM1", "COM2", "COM3", "COM4"}; std::vector<std::thread> threads; for (const auto& port : portNames) { threads.emplace_back(comPortWorker, port); } for (auto& t : threads) { t.join(); } return 0; }
В этом примере создается вектор портов portNames
, затем для каждого порта запускается отдельный поток, который обрабатывает соответствующий COM-порт. Функция comPortWorker
открывает COM-порт, выполняет операции с ним, а затем закрывает порт.
Необходимо учитывать, что при работе с несколькими COM-портами одновременно возможны проблемы с конкурентным доступом к портам, поэтому необходимо обеспечить безопасность работы потоков при доступе к общим ресурсам, например, используя мьютексы или другие средства синхронизации.