• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы young
  • Дата начала
Y

young

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

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

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

Yason

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!