![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
StealtH |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.9.2004 Репутация: нет Всего: нет |
Ситуация такая. Есть программа, которая пингует некоторое количество хостов, а потом сортирует их по нужным параметрам. При запуске пинга в несколько потоков(через TThread) программа "подвисает", т.е. она не висит, она производит свои действия. Чтобы программа так себя не вела, я чуть ли не через каждую строку вставляю Application.ProcessMessages, но это не устраняет данной проблемы.
Помимо этого есть трабла с потоками, прога "выплевывает" только по два потока, и после выполнения их запускает еще два. Подскажите в чем проблема в этих сутуациях. ![]() |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Application.ProcessMessages не поможет, дело в потоках. Дай кусок исходника. Если подвисает прога, то что-то неверное в синхронизации, покажи моменты общения потоков с программой хотя бы (а лучше ещё и момент создания потока с кодом самого потока).
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
StealtH |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.9.2004 Репутация: нет Всего: нет |
Вот держи кусок кода
|
|||
|
||||
Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
Дело все в Synchronize - от него по возможности надо избавлятся
![]() Для этого... заполнение данных на форме выдели в отдельную процедуру, которая будет обрабатывать сообщения от потоков(используй для этого PostMessage). Это сообщение отредактировал(а) Girder - 20.10.2004, 09:21 -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
Dayana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 2 Всего: 4 |
Я давно не писала потоки, но насколько я помню надо пользоваться семафорами, чтобы не происходило одновременного доступа к данным разных запущенных потоков. А у тебя явное обращение к форме в потоке...
|
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Посмотри внимательно: у него с этим всё нормально... Он всё делает в методе Synchronize... Я бы сделал где-то так:
И никаких Application.ProcessMessages не нужно, в нитях они вообще левые. Это сообщение отредактировал(а) Illusion Dolphin - 20.10.2004, 16:10 -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
StealtH |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.9.2004 Репутация: нет Всего: нет |
Действительно все дело было Synchronize(DoWork), убрал нити пошли нормально, пингует без искажений, вообщем все рульно спасибо добрые люди
![]() Только еще один маленький вопросик: Сколько максимум можно нитей запустить в одном приложении, и как это можно узнать программно для различных операционок? |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
исходя из размера стека и ограничения в 4 гига ( NT (и 2 9х) )
програмно ( если не предыдущим способом ) -- запускать потоки, пока запускаются ![]() -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
StealtH |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 16.9.2004 Репутация: нет Всего: нет |
Огромное всем спасибо, я думаю, что тему уже можно, закрыть. Но если у кого-то есть желание, то я думаю, что ее можно развить, для всеобщего обозрения
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |