|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.12.2008, 17:02 | #1 |
Пользователь
Регистрация: 10.11.2008
Сообщений: 32
|
TThread в С++ Builder
Привет всем!!! Наверняка многие работали с этим замечательным классом! Поэтому надеюсь получить от вас подсказку=)
Проблема заключается в следующем. стояла задача написать графический компонент, который рисует на канве график функции. А работать с этим компонентом необходимо через трэд. То есть функция рисования вызывается из объекта типа TThread. В качестве Входных параметров функции должен быть массив со значениями точек, по которым строится график. Все это происходит в реалтайме, то есть из внешнего приложения поступает буфер со значениями в трэд, трэд кидает это в функцию рисования, функция рисует. Буфер постоянно меняет свои значения. Итак, что я сделал. Написал компонент, создал трэд. Но за формирование буфера со значениями отвечал у меня сам поток, а его должно передавать внешнее приложение. Теперь я в ступоре, каким образом сделать динамическую передачу новых значений в поток, да так чтобы все рисовалось в динамике, как на осциллографе. Я все понимаю, что надо проверять обработал ли поток предыдущий буфер. Если ДА, то можно передавать следующий, если НЕТ, то ждать и т.д. Но не могу понять, как это организовать.
http://relax-release.ru
|
05.12.2008, 23:02 | #2 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
А как вы создаете поток? Я думаю вам стоит посмотреть в список добавляемых файлов. Там есть файл, с классом, унаследованым от потока. Добавляете ему необходимые аттрибуты. Пишете свой метод Execute(), а в главной проге просто по таймеру отправляете ему координаты новых точек. При получении новых координат, должен устанавливаться какой-то флаг. Метод Execute() проверяет, установлен ли флаг, и рисует новые точки, если установлен. Но лучше бы это дело синхронизировать через критическую секцию, во избежание всяких там багов с отрисовкой.
|
05.12.2008, 23:13 | #3 |
Пользователь
Регистрация: 10.11.2008
Сообщений: 32
|
Создал класс наследник TTHread, из основного приложения создаю объект потока, потом непосредственно читаю из файла блоками заданного размера, по одному блоку я должен передавать в поток, чтобы он его рисовал. В методе Execute() я вызываю функцию рисования...
http://relax-release.ru
|
05.12.2008, 23:16 | #4 |
Пользователь
Регистрация: 10.11.2008
Сообщений: 32
|
Вот код чтения из файла, после каждой итерации цикла массив array должен передаваться в поток. И еще не могу понять, в каком месте надо запускать сам поток, при каждой итерации цикла или как??? Вообще запутался...
Код:
http://relax-release.ru
|
05.12.2008, 23:37 | #5 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
Ну сделайте в вашем классе-потоке метод, которому будет передаваться буфер, а сам метод уже его скопирует себе, для использования.
ПыСы: а вот с вызовом - тут немного замутили. Короче, можно создать поток, сразу с аттрибутом Suspended = true, а когда нада запустить - тогда Suspended = false, но могут возникнуть проблемы с тем, что поток выполниться только один раз, а второй раз уже прога упадет. Поэтому советую сделать (за такое конечно же программистам руки по шею отрубают ) метод типа void Run();, а код его довольно прост Код:
|
05.12.2008, 23:50 | #6 |
Пользователь
Регистрация: 10.11.2008
Сообщений: 32
|
О, Боже!!! Оно работает)))))))
Ну спасибо Вам
http://relax-release.ru
|
06.12.2008, 00:52 | #7 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
И еще посоветую вам посмотреть в сторону стандартного компонента в Borland C++ Builder. Называется он PerformanceGraph (это на вкладке Samples). Этот компонент в Диспетчере задач виндовом отображает загрузку процессора и так далее. Я думаю в вашем случае будет самое оно
|
02.06.2010, 21:55 | #8 |
Пользователь
Регистрация: 30.03.2009
Сообщений: 20
|
А если мне надо сделать сразу несколько потокоа, при чем их количество заранее не известно, рассчитвается уже в процессе выполения программы. Тогда как быть??
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Метод Synchronize класса TThread | EdNovice | Общие вопросы Delphi | 10 | 01.08.2009 14:47 |
БД C++ Builder 6 | ZiKx | C++ Builder | 1 | 07.08.2008 20:43 |
использование TThread | amandra | Общие вопросы Delphi | 6 | 03.05.2008 03:13 |
Stack owerflow - глюки с TThread | IOrist | Общие вопросы Delphi | 4 | 11.11.2007 09:13 |
Как отследить завершение выполнения потока TThread? | Трик | Общие вопросы Delphi | 3 | 24.10.2007 14:55 |