Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Многозадачность в программе, Использования общих ресурсов 
:(
    Опции темы
maximjon
  Дата 1.6.2006, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.1.2006

Репутация: нет
Всего: нет



Я пишу компонент, с начало  внего задаються необходимые параметры, затем запускаю процедуру выполнения, в ней создаёться поток, который будет контролировать ещё три потока, которыесоздаються уже в первом потоке. Контрольпроизводиться следующим образом:
Есть два буффера, массивы байтов с выделением памяти, основной поток (далее контроллер) проверяет статус массивов, если они пусты или пуст хоят бы один, то запускается поток чтения данных. Он должен считать данные в первый буффер, и если к концу чтения данных для первого буффера второй особождаеться, то считывает и для него. Затем контроллер запускает обработчик данных(также поток). Учтите что это происходит сразу после считывания данных в первый буффер.
После обработки данных происходит запуск записи данных  из буфферов которые уже обработанны.

Во всём описанном есть следующие проблемы:
Всем потоки работают с общими ресурсами(буффера, днные статистики), и вылетает ошибка,об их чтение, даже если я указываю их дескриптор.
Синхронизация не поможет, потому что все они пихаються в один основной поток и глючат страшно.

А просьба такова, мне надо найти способ реализации многозадочной непрерывной обработки данных, с постоянной подгрузкой их в буффера. 
PM MAIL   Вверх
Mechanic
Дата 1.6.2006, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



Цитата(maximjon @  1.6.2006,  05:10 Найти цитируемый пост)
Синхронизация не поможет, потому что все они пихаються в один основной поток и глючат страшно

Поможет.
Создай одну общую для приложения TCriticalSection, и передавай её в каждый из создаваемых потоков.
Тогда каждый поток при попытке доступа к общим данным пускай делает enter, а потом Leave.
 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
maximjon
Дата 1.6.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.1.2006

Репутация: нет
Всего: нет



Если я правильно понял необходимо все элементы к которым будет обращаться какой-либо поток, необходимо запихать в элемент класса TCriticalSection. А что дальше делать что-то я не въехал! smile  В справке Дельфи нет примера, чтобы его разобрать а голова на перевод что-то не хочет работать.
Если не трудно дай примерчик для разбора, плизззз. 
PM MAIL   Вверх
Mechanic
Дата 1.6.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



В глобальном месте каком - нить создаешь переменную, и инитишь её:
Код

uses SyncObjs;
var CS: TCriticalSection;

initialization
   CS := TCriticalSection.Create;
finalization
   CS.Free;
end.

Потом в потоки её передаешь:
Код

Trd1 := TMyTrd.Create(true);
Trd1.CS := CS;
Trd1.Resume;

Потом в самом потоке юзаешь
Код

procedure TMyTrd.Execute; override;
begin
     шо попало
     //тут понадобилось обратиться к чему-нить глобальному
    CS.Enter;
    Шо-нитьГлобальное.Читать/Писать();
    CS.Leave;
    //Тут Шо-нитьГлобальное уже свободно, и другие потоки могут его отъюзать..
    ОпятьШоПопало;
end;
 

А вообще, чего эт я.. Есть же рульная книга из серии Must Have!  smile 

Многопоточность - как это делается в Дельфи 

Это сообщение отредактировал(а) Mechanic - 1.6.2006, 22:39
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
maximjon
Дата 4.6.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.1.2006

Репутация: нет
Всего: нет



БОЛЬШОЕ СПАСИБО!!!!! Прочитал, что-то вроде понял smile . 
Есть правда пару вопросов.
Предположим я создаю КритикалСекшион типа "КС" иничу её, но из документации я понял очень важную вещь, что владеть объектом может только один поток а уменя их 4!!! и что мне делать? Ась?!
У меня два буффера, три потока обработки данных и один управляющий поток, и основной VCL поток проги. Работа такова:
Контроллер: проверка статуса буферов, запуск потока чтения данных(если есть пустые буффера) или обработка буфферов или запись данных.
Дело ещё в том, что потоки работают одновременно...
Может производиться чтения второго буффера, в этот момент идёт обработка первого буффера, ну и конечно идёт процесс контролля всех этих процессов.
Есть мысль, можно ли создать несколько КритикалСекшион?
  

Это сообщение отредактировал(а) maximjon - 4.6.2006, 19:39
PM MAIL   Вверх
Mechanic
Дата 4.6.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



Цитата(maximjon @  4.6.2006,  19:26 Найти цитируемый пост)
Прочитал, что-то вроде понял 

Всю осилил? Фигасе! Молодец.  smile 

Конечно же, чтоб потоки, что хотят обратиться к одному буферу, не должны ждать, пока другие потоки поработают с абсолютно "отфонарным" другим буфером..  smile 
Конечно же, имеет смысл создание отдельных CriticalSection для каждого объекта, что требует отдельной синхронизации.
А можно ещё посмотреть в сторону TThreadList. Во многих случаях может оказаться полезным.

 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
Демо
Дата 5.6.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(Mechanic @  1.6.2006,  22:26 Найти цитируемый пост)
А вообще, чего эт я.. Есть же рульная книга из серии Must Have!


Есть еще книга. В ней как раз описан(и реализован полностью) нужный автору алгоритм.

Джулиан Бакнелл. Фундаментальные алгоритмы и структуры данных в Delphi.

Глава 12. Дополнительные темы.

Добавлено @ 13:24 
40Мб на Рапидшаре. 

Это сообщение отредактировал(а) Демо - 5.6.2006, 13:23


--------------------
    
PM MAIL ICQ Skype   Вверх
maximjon
Дата 6.6.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.1.2006

Репутация: нет
Всего: нет



Демо, Судя по сему у тебя хорошое подключению к нету, 40 мегов smile  мне не осилить быстро!
Для меня это огромный размер, у меня скорость соеденения всего 33,6 кила smile , так что облом. 
PM MAIL   Вверх
Демо
Дата 6.6.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



maximjon, 
Если удастся, вытащу нужную тебе главу. 


--------------------
    
PM MAIL ICQ Skype   Вверх
maximjon
Дата 4.7.2006, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.1.2006

Репутация: нет
Всего: нет



Демо, Уже прошло до фига времени, и где твоя глава? smile Мне она всё ещё очень нужна! 
PM MAIL   Вверх
Yanis
Дата 4.7.2006, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(maximjon @  6.6.2006,  20:08 Найти цитируемый пост)
Демо, Судя по сему у тебя хорошое подключению к нету, 40 мегов   мне не осилить быстро!
Для меня это огромный размер, у меня скорость соеденения всего 33,6 кила  , так что облом.  

Глава занимает 50 страниц. Выдирать их из pdf очень затруднительно. Може лучше обратиться к друзьям или в клуб сходить скачать эту книгу!? Она тебе намного больше пользы принесёт в цельном варианте, нежели в виде одной главы.

P. S. Навреное Демо забыл про главу из книги smile Все мы люди. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
maximjon
Дата 5.7.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.1.2006

Репутация: нет
Всего: нет



Yanis, есил бы ты знал в какой ж... я сижу. Тут и клубы с обрезанной скоростью!!! 
PM MAIL   Вверх
Alexeis
Дата 5.7.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



maximjon, существует специальная библиотека - называется Gala - как раз и предназначена для контроля и синхронизации многих потоков. Если надо - выложу! 

вот и ссылочка
http://alexei-s1.narod.ru/GALA.zip 

Это сообщение отредактировал(а) alexeis1 - 5.7.2006, 19:22


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
maximjon
Дата 5.7.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.1.2006

Репутация: нет
Всего: нет



alexeis1, THANKS!!!!  
PM MAIL   Вверх
Демо
Дата 6.7.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



maximjon, 
Могу выслать эту тему в PDF по почте ~6Мб. 


--------------------
    
PM MAIL ICQ Skype   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.