![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| maximjon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 27.1.2006 Репутация: нет Всего: нет |
Я пишу компонент, с начало внего задаються необходимые параметры, затем запускаю процедуру выполнения, в ней создаёться поток, который будет контролировать ещё три потока, которыесоздаються уже в первом потоке. Контрольпроизводиться следующим образом:
Есть два буффера, массивы байтов с выделением памяти, основной поток (далее контроллер) проверяет статус массивов, если они пусты или пуст хоят бы один, то запускается поток чтения данных. Он должен считать данные в первый буффер, и если к концу чтения данных для первого буффера второй особождаеться, то считывает и для него. Затем контроллер запускает обработчик данных(также поток). Учтите что это происходит сразу после считывания данных в первый буффер. После обработки данных происходит запуск записи данных из буфферов которые уже обработанны. Во всём описанном есть следующие проблемы: Всем потоки работают с общими ресурсами(буффера, днные статистики), и вылетает ошибка,об их чтение, даже если я указываю их дескриптор. Синхронизация не поможет, потому что все они пихаються в один основной поток и глючат страшно. А просьба такова, мне надо найти способ реализации многозадочной непрерывной обработки данных, с постоянной подгрузкой их в буффера. |
|||
|
||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Поможет. Создай одну общую для приложения TCriticalSection, и передавай её в каждый из создаваемых потоков. Тогда каждый поток при попытке доступа к общим данным пускай делает enter, а потом Leave. --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| maximjon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 27.1.2006 Репутация: нет Всего: нет |
Если я правильно понял необходимо все элементы к которым будет обращаться какой-либо поток, необходимо запихать в элемент класса TCriticalSection. А что дальше делать что-то я не въехал!
Если не трудно дай примерчик для разбора, плизззз. |
|||
|
||||
| Mechanic |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
В глобальном месте каком - нить создаешь переменную, и инитишь её:
Потом в потоки её передаешь:
Потом в самом потоке юзаешь
А вообще, чего эт я.. Есть же рульная книга из серии Must Have! Многопоточность - как это делается в Дельфи Это сообщение отредактировал(а) Mechanic - 1.6.2006, 22:39 --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
||||||
|
|||||||
| maximjon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 27.1.2006 Репутация: нет Всего: нет |
БОЛЬШОЕ СПАСИБО!!!!! Прочитал, что-то вроде понял
Есть правда пару вопросов. Предположим я создаю КритикалСекшион типа "КС" иничу её, но из документации я понял очень важную вещь, что владеть объектом может только один поток а уменя их 4!!! и что мне делать? Ась?! У меня два буффера, три потока обработки данных и один управляющий поток, и основной VCL поток проги. Работа такова: Контроллер: проверка статуса буферов, запуск потока чтения данных(если есть пустые буффера) или обработка буфферов или запись данных. Дело ещё в том, что потоки работают одновременно... Может производиться чтения второго буффера, в этот момент идёт обработка первого буффера, ну и конечно идёт процесс контролля всех этих процессов. Есть мысль, можно ли создать несколько КритикалСекшион? Это сообщение отредактировал(а) maximjon - 4.6.2006, 19:39 |
|||
|
||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Всю осилил? Фигасе! Молодец. Конечно же, чтоб потоки, что хотят обратиться к одному буферу, не должны ждать, пока другие потоки поработают с абсолютно "отфонарным" другим буфером.. Конечно же, имеет смысл создание отдельных CriticalSection для каждого объекта, что требует отдельной синхронизации. А можно ещё посмотреть в сторону TThreadList. Во многих случаях может оказаться полезным. --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Есть еще книга. В ней как раз описан(и реализован полностью) нужный автору алгоритм. Джулиан Бакнелл. Фундаментальные алгоритмы и структуры данных в Delphi. Глава 12. Дополнительные темы. Добавлено @ 13:24 40Мб на Рапидшаре. Это сообщение отредактировал(а) Демо - 5.6.2006, 13:23 -------------------- |
|||
|
||||
| maximjon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 27.1.2006 Репутация: нет Всего: нет |
Демо, Судя по сему у тебя хорошое подключению к нету, 40 мегов
Для меня это огромный размер, у меня скорость соеденения всего 33,6 кила |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
maximjon,
Если удастся, вытащу нужную тебе главу. -------------------- |
|||
|
||||
| maximjon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 27.1.2006 Репутация: нет Всего: нет |
Демо, Уже прошло до фига времени, и где твоя глава?
|
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Глава занимает 50 страниц. Выдирать их из pdf очень затруднительно. Може лучше обратиться к друзьям или в клуб сходить скачать эту книгу!? Она тебе намного больше пользы принесёт в цельном варианте, нежели в виде одной главы. P. S. Навреное Демо забыл про главу из книги |
|||
|
||||
| maximjon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 27.1.2006 Репутация: нет Всего: нет |
Yanis, есил бы ты знал в какой ж... я сижу. Тут и клубы с обрезанной скоростью!!!
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
maximjon, существует специальная библиотека - называется Gala - как раз и предназначена для контроля и синхронизации многих потоков. Если надо - выложу!
вот и ссылочка http://alexei-s1.narod.ru/GALA.zip Это сообщение отредактировал(а) alexeis1 - 5.7.2006, 19:22 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| maximjon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 27.1.2006 Репутация: нет Всего: нет |
alexeis1, THANKS!!!!
|
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
maximjon,
Могу выслать эту тему в PDF по почте ~6Мб. -------------------- |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |