Вызов CreateFile
три раза до с использованием любого, если порты - лучший способ достичь того, что вы хотите. В противном случае вам придется многократно «создавать» каждый порт, отправлять («записывать») данные, а затем закрывать дескриптор каждого порта (с помощью вызова CloseHandle
) - и это будет гораздо менее эффективно.
(Примечание: для COM-портов с индексом больше 9 вы должны использовать синтаксис " \\. \ COMxx ".)
Итак, чтобы открыть три порта вместе, вы можете использовать массив дескрипторов (и массив имен портов); например:
char szPort[3][10] = { "\\\\.\\COM10", "\\\\.\\COM11", "\\\\.\\COM12" };
HANDLE m_hComm[3];
for (int i = 0; i < 3; ++i) {
m_hComm[i] = CreateFile(szPort[i], // communication port string (COMX)
GENERIC_READ | GENERIC_WRITE, // read/write types
0, // comm devices must be opened with exclusive access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // Async I/O
0); // template must be 0 for comm devices
}
Затем вы можете отправлять данные на любой из открытых портов, используя соответствующее значение из массива m_hComm
. Таким образом, чтобы отправить одинаковые данные на каждый из трех портов, вы можете использовать al oop, как показано ниже:
for (int p = 0; p < 3; ++p) { // Loop to send the same data to all three ports...
//...
BOOL n = WriteFile(m_hComm[p], pBuff, nToWrite, &dwWritten, &m_ovrWrite);
//...
}
Пожалуйста, не стесняйтесь просить дальнейших разъяснений и / или объяснение.