Использование объектов класса Tthread

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем young, 5 дек 2008.

  1. young

    young Гость

    Привет всем!!! Наверняка многие работали с этим замечательным классом! Поэтому надеюсь получить от вас подсказку=)

    Проблема заключается в следующем. стояла задача написать графический компонент, который рисует на канве график функции. А работать с этим компонентом необходимо через трэд. То есть функция рисования вызывается из объекта типа TThread. В качестве Входных параметров функции должен быть массив со значениями точек, по которым строится график. Все это происходит в реалтайме, то есть из внешнего приложения поступает буфер со значениями в трэд, трэд кидает это в функцию рисования, функция рисует. Буфер постоянно меняет свои значения.

    Итак, что я сделал. Написал компонент, создал трэд. Но за формирование буфера со значениями отвечал у меня сам поток, а его должно передавать внешнее приложение. Теперь я в ступоре, каким образом сделать динамическую передачу новых значений в поток, да так чтобы все рисовалось в динамике, как на осциллографе. Я все понимаю, что надо проверять обработал ли поток предыдущий буфер. Если ДА, то можно передавать следующий, если НЕТ, то ждать и т.д. Но не могу понять, как это организовать.
     
  2. Yason

    Yason Гость

    Передача данных между приложениями называется межпроцессным взаимодействием (Interprocess communication, IPC). На RSDN есть небольшой обзор разных методов IPC. На Вашем месте, я бы использовал file mapping для буфера, и event для сообщения о готовности буфера. Проверять или не проверять, обработал ли поток предыдущий буфер - зависит от задачи. В случае осциллографа или, например, видеоплеера, "актуальность" отображаемых данных важнее, чем показать каждый кадр; поэтому если новые данные поступили, пока старые не до конца обработаны — забываем про старые, и начинаем отображать новые. О завершении обработки можно сообщить передающему потоку тоже через event.

    Альтернативно, можно использовать сокеты для преедачи данных. Тогда всё будет передаваться последовательно одним потоком, а принимающий поток сам выберет, по сколько байт считывать.
     
Загрузка...

Поделиться этой страницей