Конференция "WinAPI" » Синхронизация потоков [D7, WinXP]
 
  • Armature_Current (31.07.09 13:32) [0]
    Всем доброго времени суток!
    Начну с преамбулы. Есть внешнее устройство, общение с которым происходит по RS232(Только Rx, Tx и Gnd). Это устройство может слать данные как небольшим пакетом (байты синхронизации плюс небольшая информационная часть, байтов 10, допустим посылает свой Id), так и большим непрерывным пакетом (допустим приложение на компьютере прорисовывает осциллограммы оцифрованных данных с микроконтроллера).

    А теперь вопрос:
    Есть различные способы отправки данных из доп. потока:
    1. Synchronize()


    2. PostMessage()


    3. SendMessage()


    Так вот какой из них лучше подойдет для реализации заявленных задач, если второй грузит основной поток при непрерывном приеме, третий теряет данные в доп. потоке, а про первый ничего плохого сказать не могу, так как вроде пока работает нормально, но опыта у меня мало, вдруг есть какие подводные камни?
  • Anatoly Podgoretsky © (31.07.09 14:01) [1]
    > Armature_Current  (31.07.2009 13:32:00)  [0]

    4. сообщать об необходимости перерисовки основному потоку (PostMessage) и продолжать заниматься своей работой, естественно прорисовка должна быть быстрее.
  • Сергей М. © (31.07.09 15:03) [2]
    PostMessage не подходит для синхронизации - он всего лишь ставит сообщение в хвост целевой очереди и не ждет выборки и обработки этого сообщения целевым потоком.

    Разница между Synchronize и SendMessage при использовании на Win32 практически не ощутима - оба вызова будут дожидаться фактической обработки целевым потоком указанного метода или сообщения.

    Использование SendMessage вызовет немалые трудности при портировании кода на другие целевые платформы, отличные от Windows.
  • Вариант (03.08.09 10:34) [3]

    > Armature_Current   (31.07.09 13:32)  


    > так и большим непрерывным пакетом (допустим приложение на
    > компьютере прорисовывает осциллограммы оцифрованных данных
    > с микроконтроллера).


    Не делать этого в риал тайм, если действительно большие объемы с приличной скоростью оцифровки. Накапливать если надо в буфере (ах), сохранять на диске и т.п. Смотреть потом уже подготовленные (сохраненные) данные.  Тогда наверное все  равно что ты выберешь из трех тобой заявленных способов.
 
Конференция "WinAPI" » Синхронизация потоков [D7, WinXP]
Есть новые Нет новых   [134434   +28][b:0][p:0.001]