|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.08.2008, 07:36 | #1 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
Проблема с реализацией потока
Здравствуйте.Я решил написать небольшой сканер портов и столкнулся со следующей проблемой.Когда я ввожу в программе все данные и нажимаю кнопку сканировать,программа хоть и выполняет сканирование определенного диапозона,но на это время становится полностью не доступной ( зависает ).Решил попробовать убрать зависание с помощью потоков.Оформил сканирование в отдельный поток,выставил приоритет ну и т.д,а тормоза как были так и остались.
Вот код процедуры запуска сканирования и код модуля потока сканирования: Код:
Код:
За сканирование портов отвечает процедура Scan,которая объявлена в разделе Private модуля потока. Помогите решить проблему с тормозами пожалуйста. Последний раз редактировалось Stilet; 19.08.2008 в 08:35. |
19.08.2008, 08:38 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Урррр... Не люблю VCLный поток...
А почему бы тебе не попробовать создавать поток через Win API? И кстати попробуй в цикле сканирования поставить sleep(100), мож на проц не так давить будет...
I'm learning to live...
|
19.08.2008, 08:41 | #3 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
InseR, а в чем смысл вашего потока ? у вас же его нет.
У вас весь поток выполняется в основном VCL- потоке. Для начала лучше всего почитайте теорию реализации потоков и методов синхронизации
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
19.08.2008, 09:00 | #4 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
Извините,но я не очень понял ход ваших мыслей.Как это - " поток выполняется в основном VCL-потоке" и как от этого избавиться?
|
19.08.2008, 09:18 | #5 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
правильно спроектировать многопоточность.
Вот вы используете Synchronize(Scan); а что при этом происходит ? у вас же вся реализация потока заключается в методе scan. метод Synchronize как вы сами написали в комментарии синхронизирует поток с основным VCL потоком, ну а раз вы это написали в коментарии, то должны понимать что пишете.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
19.08.2008, 09:36 | #6 | |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
Цитата:
|
|
19.08.2008, 09:43 | #7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Все сканирование реализовать в .Execute; Ну функцию scan
|
19.08.2008, 10:13 | #8 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
|
19.08.2008, 10:19 | #9 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
посмотрите на реализацию функции scan и поймете что это глупость
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
19.08.2008, 10:21 | #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 |