![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Уважаемые программисты, направьте на путь.
Есть список URL в TStringList. Я забираю данные с этих страниц к себе в базу. Многопоточность создать удалось, но куча косяков. Среди них не могу по-челевечески решить следующий вопрос: Я хочу устанавливать количество одновременно работающих потоков, например 8, а записей пусть 100. Как мне это верно организовать? Т.е. мне нужно отслеживать количество работающих потоков, как только какие-то освободились, подгружать новые? Код:
На одном из форумов получил ответ: Цитата:
Подскажите наиболее верное решение. Я только начал знакомиться с потоками. Заранее огромное спасибо |
#2
|
|||
|
|||
![]() Тебе в сторону CriticalSection.
Собственно, тебе надо сделать следующую вещь (как бы делал я): 1. Делаем объект-одиночку для списка адресов. 2. Делаем объект пула потоков. Можно помотреть, по-моему в Indy уже такой есть. Его задача контролировать сам список потоков. 3. Делаем класс потоков. В своем состоянии ничего не делания он должен каждые по-секунды, например, просыаться и спрашивать у объекта одиночки - есть ли задания для него. Если нет - то засыпаем опять. Получения задания нужно сделать через CriticalSection, что не даст нескольким потокам вытащить один и тот же адрес. В этом месте они просто встанут в очередь. 4. Потоки можно создать сразу и уничтожить при закрытии программы. Это простой вариант. Есть еще сложный, когда потоки будут извещать о том, что им делать нечего и умирать, а какой-нить менеджер будет из создавать и раздавать задания. Вопрос - нужно ли это. |
#3
|
||||
|
||||
![]() Цитата:
Код:
http://data.cod.ru/141194 Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 01.02.2012 в 10:02. |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
bulldog (30.11.2012)
|
#4
|
|||
|
|||
![]() Спасибо. Буду пробовать/кумекать
![]() |
#5
|
|||
|
|||
![]() NumLock: MaximumCount = 8 - константа. Пожскажи, а просто, как переменную я разве не могу задать?
|
#6
|
||||
|
||||
![]() Можешь,
Код:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
||||
|
||||
![]() Код:
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
bulldog (30.11.2012)
|
#8
|
|||
|
|||
![]() NumLock, а можете подсказать, что делать если записей ооочень много? столько потоков одновременно наметво вешают систему
![]() |
#9
|
||||
|
||||
![]() пересмотреть алгоритм!
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
bulldog (30.11.2012)
|