SashaMaks> Всё в двух потоках реализовано так, чтобы один поток на одном ядре работал только по приёму и сохранению данных в памяти
Это не поможет, если дрова приёмного железа кривые.
Раньше использовал вставляемую в комп плату MOXA с RS485.
Это как бэ шибко профессиональная железка для промэлектроники.
Мало того, что она временами вообще забывала работать.
Так когда работает, не моги ещё что-то в винде делать - ни прогу какую запустить, ни, даже, окно передвинуть. Сразу появляются ошибки "драйвер не успел забрать пришедшие байты из железа". Полный Пэ.
В своих прогах общения с компортом я всегда делаю тред чтения и ставлю ему высокий приоритет:
void MyThread(void)
{
SPriority = SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SClass = SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
SPriority = GetPriorityClass(GetCurrentProcess());
SClass = GetThreadPriority(GetCurrentThread());
// что эти строчки значат уже не помню!!!
...
}
И ошибок "моя прога не успела забрать байты из буфера драйвера" не бывает.
А на драйвер MOXA я подействовать не могу, вот он и гадит.
Сейчас перешёл на FT232, у них с дровами всё в порядке.
Потребление на чтение процессора ничтожно маленькое, что таскманагер даже одного процента не показывает.