Показать сообщение отдельно
  #1  
Старый 26.01.2015, 08:33
Jury_yamal Jury_yamal вне форума
Прохожий
 
Регистрация: 04.11.2014
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как бы вы сделали обмен между потоками для СОМ порта

Добрый день Всем.
Собственно сам вопрос как лучше сделать синхронизацию/обмен между потоками одного приложения. Знаю что можно через критические секции,postmessage,send message, posttreadmessage,synchronize.
Сама задача выглядит так:
1. Есть главный поток с формой который стартует дополнительный поток приема байтов из компорта TreadRead.
2. Отсылка запроса в компорт (Write) пока делается из основного потока с формой. Пока не определился нужно ли его выносить в отдельный поток записи. Что посоветуете?. Для уточнения работа с компортом организована посредством WinAPI и структурой Overlapped т.е асинхронно.
3. Думаю сделать еще один поток (TreadWork) который будет стартовать из основного потока и разгребать полученные данные от потока компорта (TreadRead) и отсылать сформированные данные уже в основной поток с формой.
Вопрос как лучше сделать сделать обмен между TreadRead->TreadWork-> Основной поток с формой?
Как я вижу можно сделать допустим так получили данный в Tread Read отправили message в TreadWork , обработали послали message в основной поток. Причем здесь тоже может быть 2 варианта.

1. данные могут передаваться в самом сообщении (wparam b lparam).

2. просто шлем сообщение (допустим ReadOk), поток TreadWork получив такое сообщение считывает из поля TreadRead массив байтов (еще один вопрос нужно ли защищать данные через критическую секцию), обрабатывает и отсылает главному потоку.

3. Можно еще сделать на Event с WaitFor Miltiple Object.

Вот пока все что смог придумать. Может подскажите что будет работать надежней и быстрее?
С уважением к всем откликнувшимся.
Ответить с цитированием