| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Многозадачность в программе |
| Автор: maximjon 1.6.2006, 05:10 |
| Я пишу компонент, с начало внего задаються необходимые параметры, затем запускаю процедуру выполнения, в ней создаёться поток, который будет контролировать ещё три потока, которыесоздаються уже в первом потоке. Контрольпроизводиться следующим образом: Есть два буффера, массивы байтов с выделением памяти, основной поток (далее контроллер) проверяет статус массивов, если они пусты или пуст хоят бы один, то запускается поток чтения данных. Он должен считать данные в первый буффер, и если к концу чтения данных для первого буффера второй особождаеться, то считывает и для него. Затем контроллер запускает обработчик данных(также поток). Учтите что это происходит сразу после считывания данных в первый буффер. После обработки данных происходит запуск записи данных из буфферов которые уже обработанны. Во всём описанном есть следующие проблемы: Всем потоки работают с общими ресурсами(буффера, днные статистики), и вылетает ошибка,об их чтение, даже если я указываю их дескриптор. Синхронизация не поможет, потому что все они пихаються в один основной поток и глючат страшно. А просьба такова, мне надо найти способ реализации многозадочной непрерывной обработки данных, с постоянной подгрузкой их в буффера. |
| Автор: maximjon 1.6.2006, 19:06 |
| Если я правильно понял необходимо все элементы к которым будет обращаться какой-либо поток, необходимо запихать в элемент класса TCriticalSection. А что дальше делать что-то я не въехал! Если не трудно дай примерчик для разбора, плизззз. |
| Автор: Mechanic 1.6.2006, 22:26 | ||||||
В глобальном месте каком - нить создаешь переменную, и инитишь её:
Потом в потоки её передаешь:
Потом в самом потоке юзаешь
А вообще, чего эт я.. Есть же рульная книга из серии Must Have! http://forum.vingrad.ru/index.php?showtopic=60076 |
| Автор: maximjon 4.6.2006, 19:26 |
| БОЛЬШОЕ СПАСИБО!!!!! Прочитал, что-то вроде понял Есть правда пару вопросов. Предположим я создаю КритикалСекшион типа "КС" иничу её, но из документации я понял очень важную вещь, что владеть объектом может только один поток а уменя их 4!!! и что мне делать? Ась?! У меня два буффера, три потока обработки данных и один управляющий поток, и основной VCL поток проги. Работа такова: Контроллер: проверка статуса буферов, запуск потока чтения данных(если есть пустые буффера) или обработка буфферов или запись данных. Дело ещё в том, что потоки работают одновременно... Может производиться чтения второго буффера, в этот момент идёт обработка первого буффера, ну и конечно идёт процесс контролля всех этих процессов. Есть мысль, можно ли создать несколько КритикалСекшион? |
| Автор: Mechanic 4.6.2006, 21:25 |
Всю осилил? Фигасе! Молодец. Конечно же, чтоб потоки, что хотят обратиться к одному буферу, не должны ждать, пока другие потоки поработают с абсолютно "отфонарным" другим буфером.. Конечно же, имеет смысл создание отдельных CriticalSection для каждого объекта, что требует отдельной синхронизации. А можно ещё посмотреть в сторону TThreadList. Во многих случаях может оказаться полезным. |
| Автор: Демо 5.6.2006, 13:22 |
Есть еще книга. В ней как раз описан(и реализован полностью) нужный автору алгоритм. http://oreon.com.ru/2006/03/27/fundamentalnye_algoritmy_i_struktury_dannykh_v_Delphi_baknell.html Глава 12. Дополнительные темы. Добавлено @ 13:24 40Мб на Рапидшаре. |
| Автор: maximjon 6.6.2006, 19:08 |
| Демо, Судя по сему у тебя хорошое подключению к нету, 40 мегов Для меня это огромный размер, у меня скорость соеденения всего 33,6 кила |
| Автор: Демо 6.6.2006, 19:36 |
| maximjon, Если удастся, вытащу нужную тебе главу. |
| Автор: maximjon 4.7.2006, 05:05 |
| Демо, Уже прошло до фига времени, и где твоя глава? |
| Автор: Yanis 4.7.2006, 08:03 | ||
Глава занимает 50 страниц. Выдирать их из pdf очень затруднительно. Може лучше обратиться к друзьям или в клуб сходить скачать эту книгу!? Она тебе намного больше пользы принесёт в цельном варианте, нежели в виде одной главы. P. S. Навреное Демо забыл про главу из книги |
| Автор: maximjon 5.7.2006, 19:08 |
| Yanis, есил бы ты знал в какой ж... я сижу. Тут и клубы с обрезанной скоростью!!! |
| Автор: Alexeis 5.7.2006, 19:11 |
| maximjon, существует специальная библиотека - называется Gala - как раз и предназначена для контроля и синхронизации многих потоков. Если надо - выложу! вот и ссылочка http://alexei-s1.narod.ru/GALA.zip |
| Автор: maximjon 5.7.2006, 19:26 |
| alexeis1, THANKS!!!! |
| Автор: Демо 6.7.2006, 17:31 |
| maximjon, Могу выслать эту тему в PDF по почте ~6Мб. |
| Автор: maximjon 10.7.2006, 18:36 |
| Чуть позже, плиз у меня перегруз на мыле! На днях разгребу и сообщу далее... Спасибо! |
| Автор: maximjon 10.7.2006, 19:11 |
| Уже разгрёб! Можешь присылать, на maximjon@yandex.ru |
| Автор: Демо 10.7.2006, 23:50 |
| Выслал |
| Автор: maximjon 11.7.2006, 19:18 | ||
Что-то нету у меня письмеца!
|