|
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
|
||||||
[Delphi] Многопоточность29.08.2010, 11:10. Показов 26397. Ответов 67
Метки нет (Все метки)
Интерисует след. вопрос:
"Как сделать создание потоков? (кол-во зависит от того сколько укажет пользователь)" Хотелось бы увидеть "готовый код", лазя по гуглу оч много информации, но там слишком много лишнего текста читая который тупо мозг взрывается )) Добавлено через 4 минуты + как сделать синхронизацию (Первый пост редактировать не могу, проблемы в опере...) Добавлено через 19 часов 3 минуты Есть следующие строчки
0
|
||||||
| 29.08.2010, 11:10 | |
|
Ответы с готовыми решениями:
67
Многопоточность в Delphi
Что лучше брать Delphi XE2, Delphi XE, Delphi 7? |
|
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
|
|
| 16.09.2010, 20:12 | |
|
ну как бы это глупый код, хотя я особо и не понимаю чего ты этим хочешь добится, ибо свойство freeonterminate отвечает за то что после того как Execute потока отработала поток остался жив или же умер.... поэтому устанавливать это свойство нужно перед запуском потока... а не как то просто на клик на кнопке (это бессмыслено ибо нет привязки к запуску потока - т.е. точки относительно которой можно оценивать правильность кода)
1
|
|
|
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
|
|||||||
| 16.09.2010, 20:36 [ТС] | |||||||
|
Добавлено через 3 минуты
0
|
|||||||
|
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
|
|||||||||||||
| 16.09.2010, 20:55 | |||||||||||||
Добавлено через 1 минуту
0
|
|||||||||||||
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 18
|
|
| 13.12.2013, 10:15 | |
|
начинаю изучать многопоточность. в принципе в данном примере есть всё, что нужно (моя программа работает, ставит потоки на паузу, завершает потоки.
теперь как мне отследить количество активных потоков (при завершении), чтобы дождаться полного их завершению проделать кое какие операции с результатами? понимаю, что тема старая, но с нетерпением жду ответа Добавлено через 1 час 6 минут запускать цикл проверки каждого потока по значению Terminated ?
0
|
|
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
||||||
| 13.12.2013, 10:30 | ||||||
|
Можно сделать через семафоры:
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 18
|
|||||||||||
| 13.12.2013, 10:59 | |||||||||||
|
я может быть не совсем понятно выразился, а может не правильно прочитал ваш ответ.
по данному примеру. вот я завершаю потоки
просто после их остановки видно, как некоторые с запозданием завершаются (выводят результат работы) Добавлено через 2 минуты
0
|
|||||||||||
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
||||||
| 13.12.2013, 11:06 | ||||||
|
aIThread[i].Terminate - это просто установка флага, который может быть использован для организации завершения работы потока, но к фактическому завершению он не имеет никакого отношения.
Добавлено через 3 минуты Вывод кол-ва существующих потоков:
1
|
||||||
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||
| 13.12.2013, 11:26 | ||
|
Более удобно вместо счётчика завести список, например, типа TList. И в этом списке хранить ссылки на выполняющиеся потоки. Т. е., перед запуском очередного потока следует добавлять ссылку на него в список. А в обработчике события OnTerminate удалять ссылку на тот экземпляр TThread, который вызвал этот обработчик. И далее, если TList.Count = 0, то посылать форме соответствующее сообщение.
1
|
||
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 18
|
|
| 13.12.2013, 12:37 | |
|
0
|
|
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
| 13.12.2013, 14:08 | |
|
Нет, это подразумевает, что поток автоматически уничтожится после окончания своей работы.
0
|
|
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 18
|
|
| 13.12.2013, 14:57 | |
|
в процедуре TIThread.Execute ставить проверку на terminated и если да, то Free; ?
0
|
|
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
| 13.12.2013, 15:01 | |
|
Можно просто - Exit.
1
|
|
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 18
|
|
| 14.12.2013, 13:13 | |
|
0
|
|
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
| 14.12.2013, 13:19 | |
|
Когда процедура Execute завершится.
0
|
|
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 18
|
||
| 14.12.2013, 13:24 | ||
|
то он завершится автоматически после добавления строки? так получается? (при условии, что я вконце скомандовал Terminate)
0
|
||
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
| 14.12.2013, 13:34 | |
|
Он завершится автоматически без всяких доп. команд.
0
|
|
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 18
|
||
| 14.12.2013, 13:59 | ||
|
0
|
||
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
| 14.12.2013, 14:17 | |
|
К завершению процедуры Execute - циклов может быть несколько, а может вообще не быть.
1
|
|
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 18
|
||||||
| 15.12.2013, 10:57 | ||||||
|
спс понял, осталось еще про семафоры почитать
Добавлено через 18 часов 0 минут подскажите, я правильно пользуюсь семафором?
после чтения и удаления строки (первый этам семафора) начинается полезные действия, для записи результата опять жду семафора.
0
|
||||||
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
| 15.12.2013, 12:14 | |
|
В данном случае надо использовать метод Synchronize, а не семафоры.
И подсчет кол-ва потоков так правильно работать не будет.
0
|
|
| 15.12.2013, 12:14 | |
|
Помогаю со студенческими работами здесь
60
Многопоточность Многопоточность Многопоточность Многопоточность многопоточность Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации:
В классе Работник добавить:
накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни
коэффициентПрезентеизма — снижает продуктивность. . .
|
|
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день.
Для работы необходим браузер,. . .
|
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности
Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано.
. . .
|
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
|
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива
Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
|