Цитата
Воспользоваться synchronized процедурой
Ага, теперь понял откуда ноги ростут. Эта процедура из TThread. При создании модуля с классом TThread и написано, что нельзя рисовать из потока, кроме как используя метод synchronize. Позже попробую написать его потомок, а пока я потоки реализованы с помощью API. В этом случае есть возможность рисовать из потока в главном окне?
Цитата
Нужно и то и другое - с помощью event'ов сообщать что появились новые данные, с помощью CriticalSection защищать доступ к этим данным (FIFO) из 2х разных потоков
Что бы не действовать методом научного тыка приведу краткий алгоритм, а то не уверен, что правильно Вас понял.
Поток приема из УАРТа.
Код
1. Ждем стартовый байт. (WaitCommEvent(), WaitForSingleObject())
2. Входим в критическую секцию. (EnterCriticalSection())
3. Записываем данные в буфер. (ReadFile())
4. Выходим из критической секции. (LeaveCriticalSection())
5. Устанавливаем событие в сигнальное состояние (событие с автосбросом) (SetEvent())
6. Переходим к п. 1.
Поток обработки данных
Код
1. Ждем наступления события. (WaitForSingleObject())
2. Входим в критическую секцию.
3. Извлекаем данные из буфера.
5. Выходим из критической секции.
6. Переходим к п. 1.
И как после извлечении данных из буфера и выхода из критической секции вставить пункт "Рисуем в главном окне", чтобы он отработал нормально?