![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
![]()
Здравствуйте.Я решил написать небольшой сканер портов и столкнулся со следующей проблемой.Когда я ввожу в программе все данные и нажимаю кнопку сканировать,программа хоть и выполняет сканирование определенного диапозона,но на это время становится полностью не доступной ( зависает ).Решил попробовать убрать зависание с помощью потоков.Оформил сканирование в отдельный поток,выставил приоритет ну и т.д,а тормоза как были так и остались.
Вот код процедуры запуска сканирования и код модуля потока сканирования: Код:
Код:
За сканирование портов отвечает процедура Scan,которая объявлена в разделе Private модуля потока. Помогите решить проблему с тормозами пожалуйста. ![]() Последний раз редактировалось Stilet; 19.08.2008 в 08:35. |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Урррр... Не люблю VCLный поток...
А почему бы тебе не попробовать создавать поток через Win API? И кстати попробуй в цикле сканирования поставить sleep(100), мож на проц не так давить будет...
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
InseR, а в чем смысл вашего потока ? у вас же его нет.
У вас весь поток выполняется в основном VCL- потоке. Для начала лучше всего почитайте теорию реализации потоков и методов синхронизации
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
![]()
Извините,но я не очень понял ход ваших мыслей.Как это - " поток выполняется в основном VCL-потоке" и как от этого избавиться?
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
правильно спроектировать многопоточность.
Вот вы используете Synchronize(Scan); а что при этом происходит ? у вас же вся реализация потока заключается в методе scan. метод Synchronize как вы сами написали в комментарии синхронизирует поток с основным VCL потоком, ну а раз вы это написали в коментарии, то должны понимать что пишете.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Все сканирование реализовать в .Execute; Ну функцию scan
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
![]() |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
посмотрите на реализацию функции scan и поймете что это глупость
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
Вы из принципа не читаете что вам осветуют ? перед тем как браться за реализацию многопоточности необходимо получить минимум матчасти по основам этого направления программирования. А статей по потокам великое множество. В конкретном случае неправильно все, поэтому подсказывать что-то конкретное безсмысленно.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как проверить существование потока? | John_chek | Общие вопросы Delphi | 3 | 17.01.2008 15:16 |
Создание события потока | Arteom | Общие вопросы Delphi | 9 | 11.01.2008 21:16 |
Распараллеливание потока | eXa | Общие вопросы Delphi | 3 | 19.07.2007 20:11 |