Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2015, 11:27   #1
vipok72
Пользователь
 
Регистрация: 26.07.2015
Сообщений: 59
По умолчанию Идея реализации задуманного

Всех приветствую, есть задумка которую хочу реализовать, а как не знаю, вот и прошу помощи, подсказки, идеи...

В общем есть 1 поток который грузит страницу с неким кодом из которого получается по 10 кусков кода в каждом из которых есть по 1 ссылке которая собстна и обрабатывается...

Вот... хочу сделать программу многопоточной, ибо скорость мне ооочень кстати будет... только вот придумать никак не могу...
Нужно чтобы 1 поток грузил основную страницу...
и запускал по очереди еще 10 потоков которым давал по куску кода, далее после обработки кода и нужной страницы каким либо образом оповещал главный поток чтобы он продолжил свою работу...
Впринципе остановить поток можно как нибудь поставив его на паузу, а как проверять закончили они работу или нет не знаю... хотя с помощью переменной-флага можно
Но как реализовать это понятия не имею к сожалению...
Код каждого из потоков в potok.Execute будет один и тот же включая и основной, как реализовать выполнение одним потоком одной части кода а остальными другой не знаю...
ну чтобы они выполняли разные задачи...
ну куски кода для каждого из потоков можно хранить в переменной объявленной в threadvar...
Как дается кусок кода вообще в данный момент... из основного кода копируется от начала до определенного символа часть кода, кусок кода который поступил в обработку удаляется из основного кода
Как реализовать такое... поток не притронется к коду пока другой код не скопирует нужную ему часть... ну впринципе это можно сделать с помощью переменной-флага

Последний раз редактировалось vipok72; 30.07.2015 в 11:31.
vipok72 вне форума Ответить с цитированием
Старый 30.07.2015, 11:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как сейчас загрузка выглядит? Всмысле код.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2015, 11:54   #3
vipok72
Пользователь
 
Регистрация: 26.07.2015
Сообщений: 59
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А как сейчас загрузка выглядит? Всмысле код.
запускаю поток кнопкой, поток грузит код страницы в переменную и в цикле for от 1 до 10 (ссылок всего 10 которые обрабатываются) вырезает из этого кода кусок, который и обрабатывает
А нужно сделать так:
запускаю основной поток кнопкой, поток грузит страницу в переменную, и запускает потоки которые вырезают себе по куску кода, основной поток приостанавливается до завершения работы потоками... (1-10 сек)

Последний раз редактировалось vipok72; 30.07.2015 в 11:58.
vipok72 вне форума Ответить с цитированием
Старый 30.07.2015, 12:21   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Не правильно...
Резать должен один поток, т.к. переменная одна, и доступ к ней из разных потоков все равно придется синхронизировать
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 30.07.2015, 13:07   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот именно. Скачал, порезал - в цикле попередавал в доппотоки и порядок.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2015, 15:47   #6
vipok72
Пользователь
 
Регистрация: 26.07.2015
Сообщений: 59
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
Не правильно...
Резать должен один поток, т.к. переменная одна, и доступ к ней из разных потоков все равно придется синхронизировать
Т.е. надо будет сделать массив в него пихнуть куски, потом запустить доп потоки и в зависимости от переменной i каждый поток будет брать свой кусок и работать с ним?
А можно например объявить 2 разных класса в type?
ну типо:
TNewThread = class(TThread)
potok = class(TThread)
Например чтобы TNewThread работал постоянно со страницой и резал, а potok это те самые 10 потоков которые обрабатывают, а как реализовать ожидание основным потоком остальных потоков?
Есть идея как с переменной-флагом это реализовать и все...
vipok72 вне форума Ответить с цитированием
Старый 30.07.2015, 16:42   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Т.е. надо будет сделать массив в него пихнуть куски, потом запустить доп потоки и в зависимости от переменной i каждый поток будет брать свой кусок и работать с ним?
Отрезать кусок и пихать СРАЗУ в поток.
А в массиве можно хранить сами потоки (на всякий случай, вдруг захочется их остановить и еще что-то сделать с ними).

Цитата:
как реализовать ожидание основным потоком остальных потоков?
их не надо ждать, надо получать информацию об их завершении!!!
ожидание (ПОЛУЧЕНИЕ информации о завершении!!!!) потоков через OnTerminate
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.07.2015, 21:44   #8
vipok72
Пользователь
 
Регистрация: 26.07.2015
Сообщений: 59
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Отрезать кусок и пихать СРАЗУ в поток.
я не совсем понимаю... надо я так понял создать переменную в threadvar и каким то образом передать кусок примерно таким образом?
Код:
potok.Execute(false,"тут передать кусок")
vipok72 вне форума Ответить с цитированием
Старый 30.07.2015, 21:48   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
var Kuski:TStringList; //Определяем массив для кусков
...
Kuski.Text:=....; //Загоняем в него информацию
for i:=0 to Kuski.Count-1 do //В цикле
 With TPotok.Create(True) do begin //Создаем поток
  FreeOnTerminate:=true; //Просим его самоустраниться, когда его услуги более не понадобятся
  ValueKusok:=Kuski[i]; //Кидаем ему в некое свойство кусок
  Start; //Запускаем
 end;
Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2015, 22:52   #10
vipok72
Пользователь
 
Регистрация: 26.07.2015
Сообщений: 59
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
var Kuski:TStringList; //Определяем массив для кусков
...
Kuski.Text:=....; //Загоняем в него информацию
for i:=0 to Kuski.Count-1 do //В цикле
 With TPotok.Create(True) do begin //Создаем поток
  FreeOnTerminate:=true; //Просим его самоустраниться, когда его услуги более не понадобятся
  ValueKusok:=Kuski[i]; //Кидаем ему в некое свойство кусок
  Start; //Запускаем
 end;
Идея ясна?
Ну допустим что массив я создал, все сделал как вы написали, а как мне объявить свойство?
Как мне точно узнать что все потоки завершили работу?
vipok72 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идея реализации или как и что? kta87 Фриланс 0 21.06.2012 12:08
НУЖНА ХОТЯ БЫ ИДЕЯ ИДЕЯ РЕШЕНИЯ!) немного непонятная задача с массивом.... ngup_k Паскаль, Turbo Pascal, PascalABC.NET 1 12.12.2011 19:33
Сравнение даты (PHP MYSQL) Нужна идея реализации! YuZi_2009 PHP 6 11.02.2011 14:55
Идея жужка Фриланс 5 23.01.2011 11:02
Идея реализации скелета класса TwiX Общие вопросы Delphi 11 04.10.2010 19:51