![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| ilya333 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.1.2006 Репутация: нет Всего: нет |
Пытаюсь написать программку, которая бы в многопоточном режиме искала и отслеживала состояние FTP-серверов (и просто компьютеров при помощи эхо).
Основываясь на личном опыте, пришёл к выводу, что использовать в своих программах всякие готовые компоненты, - это не для меня. Потому что в них обычно заложено много всего, а того, что нужно мне, как обычно, нет. А задачи то тривиальные. Не нужны мне всякие навороты. Я хочу, чтобы код был компактный, без всяких излишеств, и чтобы мне самому было понятно, что происходит в программе, и что нужно делать в каждом конкретном случае. Давно убедился, что третьей версии Delphi для простых программерских нужд всегда хватает, так сказать, "выше крыши". Ведь в неё заложено всё, что нужно, и нет ничего лишнего. "Delphi 3 - FOREVER". Вот и сижу, пытаюсь по MSDN понять, как при помощи стандартных API функций, имеющихся в WinInet, сделать то, что мне нужно. Не получается. В один поток всё работает замечательно, да вот только на выполнение команды InternetConnect уходит примерно 22 секунды (тайм-аут, который тоже хотелось бы как-то уменьшить) для каждого IP-адреса, который не отвечает. А я хочу, чтобы проверка доступности происходила, скажем для 765 адресов, за минуту-две, а не за 2 часа. Т.е. нужно как-то создать многопоточность (например, от двух до 10 потоков), ведь в асинхронном режиме эти команды, вроде бы как, должны работать. Но как это сделать, я не знаю. Нашёл готовое решение (реально работающее как надо), но есть два НО: 1) Оно написано на С++, а я этот синтаксис терпеть не могу. Любое чтение программ, написанных на С++, вызывает у меня постепенное отвращение, отупление и озлобление от того, что я ни фига не пониманию, хотя, вроде бы, всё понятно. 2) Там используется решение, основанное не на WinInet, а на создании Socket-ов. А в этом я тоже ничего не понимаю. Delphi я изучаю только по help-ам, которые там есть, а в них про WinInet ничего не написано. Облазив Инет, я пришёл к выводу, что на функциях WinInet сделать многопоточность не удастся. Отсюда вопрос: я прав, и мне надо забросить идею с WinInet и заняться сокетами, или всё-таки это возможно? |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: нет Всего: 1 |
Дружище! Та же проблема! Я тоже должен проверить около 200 серверов, которые считываются из MySQL базы данных.
Я Написал небольшую функцию. Но на проверку каждого FTP уходит около 2 секунд (если фтп OnLine) и около 10 секунд (если он Offline).
Ждём помощи. |
|||
|
||||
| ilya333 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.1.2006 Репутация: нет Всего: нет |
То, что мелкософт обещает асинхронную работу нужных мне функций, это и так ясно. Сделал я то, что написано в MSDN. Только, почему-то, асинхронности как не было, так и нет (описанная мной функция InternetSetStatusCallback не срабатывает и процедура InternetStatusCallback остаётся не при делах). А ведь должно работать. Это первый гвоздь. Второй состоит в том, что многопоточность я ни разу не организовывал. По идее, при создании потоков нужно описывать триггеры, для их обработки делать диспетчера и синхронизировать все события с помощью симафоров. А это такой гемор.
Хочется как-то по-простому, по-домашнему, и чтобы работало. Добавлено @ 20:23 От тормознутости поиска спасение одно: опрашивать адреса в 10 потоков сразу. Можно не делать никаких диспетчеров и не синхронизировать события в потоках, а просто дожидаться завершения всех потоков. Это не так красиво и не спасает от возможных ошибок и проблем в сети, зато тупо и эффективно. Одна проблема: где взять хороший пример, написанный на Delphi и примерно в тему. |
|||
|
||||
| ilya333 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.1.2006 Репутация: нет Всего: нет |
Как-то лень было лазать по форуму, искать подходящие темы, т.к. форумы я посещаю редко, в-принципе. А тут немного поползал и сразу нашёл то, что интересовало с самого начала:
http://forum.vingrad.ru/index.php?showtopic=60076 В свободное от безделья время поизучаю. Глядишь, что-нибудь и получится. |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: нет Всего: 1 |
Можешь дать мне на мыло xonxt()mail.ru Этот код на С++? Попробую перевести на ДЕЛЬФИ
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |