Похоже, ваш замысел состоит в том, чтобы опрашивать порты для данных, стоящих в очереди там. Это самый простой способ чтения данных из этих портов. Вы можете использовать один поток для опроса двух портов, один за другим.
Open COM3
Open COM4
LOOP
Check for data on COM3.
If data, read and process
Check for data on COM4.
If data, read and process
Sleep for remainder of polling interval
repeat from LOOP
Все это, вероятно, должно быть сделано в одном потоке, чтобы другой основной поток мог следить за взаимодействием с пользователем и т. Д., Пока поток опроса спит.
Обработка данных в этом потоке или в другом зависит от многих деталей.