Форум: "Сети";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизПауза в потоках Найти похожие ветки
← →
vasechka (2004-09-29 15:07) [0]Тут вопрос паузы в программе прозвучал, а вот я сейчас столкнулся с проблемой.
Я хочу вам рассказать такое наблюдение и задать вопрос.
Приложение у меня работает в 100 потоках к примеру, каждый поток реализует сетевое подключение, чтото наподобие брута. Каждый поток работает следующим образом. При его создание создается сетевой компонент со своими параметрами. Далее я с каждого потока отправляю пакет на логин к примеру по фтп. И всё это крутится в цикле while not Terminated Приходит событие об успешном логине. И вот тут камень, я не должен отправлять ответ мгновенно, нужно подождать хотя бы 5 секунд. Прочитав вопрос "паузы в программе" я решил попробовать это в потоках. Sleep(msecs) оказался не пригодным изза того что он притормаживает также работу сетевого компонента в потоке, если вообще не приостаналивает, но при этом ресурсов почти не съедал. Метод из RxLib грузит проц на 80% при 100 потоках, но сетевой комопнет работает чудесно. Отсюда вопрос как же всё таки заставить поток подождать определенное количество времени без особой загрузки проца. Может ктото уже сталкивался с этим.
Я слышал чтото про WaitMessage, но это мне кажется не то совсем, покажите пожалуйста если знаете, желательно в виде исходного кода. Мы пока учимся программить.
← →
MS Marketing Department © (2004-09-29 15:14) [1]Что за сетевой компонент?
И почему все-таки ен Sleep?
← →
vasechka (2004-09-29 15:20) [2]компонент
Wsocket из набора ICS
если работаю через sleep то не вызываются события пока этот sleep не закончится, то есть поток замирает наподобие метода suspended. а вот rxlib почемуто без особых проблем работает только вот ресурсов кушает оч много, так как каждый поток ведь вызывает его и каждый экземпляр потока начинает грузить проц таким циклом. Сейчас читаю про
MsgWaitForMultipleObjects только не врублюсь чтото. Помогите чтонить придумать ;)
← →
vasechka (2004-09-29 15:23) [3]Вот что нашел, сейчас попробую.
procedure Delay(Milliseconds: Integer);
var
Tick: DWord;
Event: THandle;
begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := GetTickCount + DWord(Milliseconds);
while (Milliseconds > 0) and
( MsgWaitForMultipleObjects (1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
Milliseconds := Tick - GetTickcount;
end;
finally
CloseHandle(Event);
end;
end;
← →
vasechka (2004-09-29 15:29) [4]УХХХ ты, вот это работа, вот это я понимаю.
ставлю 500 потоков и хоть бы хны. максимум съедается 15% ресурсов проца.!!!
Ребята спасибо!
← →
Erik1 © (2004-09-29 15:46) [5]Ты даже примерно непредставляеш себе как работает "Wsocket из набора ICS". Если будеш использовать Indy сможеш sleep использовать, навено еще больше ресурсов сэкономиш.
← →
Digitman © (2004-09-29 15:46) [6]
> Приходит событие об успешном логине. И вот тут камень, я
> не должен отправлять ответ мгновенно, нужно подождать хотя
> бы 5 секунд
что это еще за "событие" такое ? компонент какой используешь ?
где, каким документом регламентирован тот факт, что ты чего-то должен еще "ждать" ?
что значит "ответ" ? "ответ" предполагает "запрос" ! тебе кто-то запрос прислал ? что это за протокол, который посылает тебе запрос, на который ты якобы должен послать ответ ? в FTP нет такого !
← →
Digitman © (2004-09-29 15:48) [7]
> ставлю 500 потоков и хоть бы хны
алгоритм, требующий столько трэдов, можнго смело отправлять в мусор
← →
debuger © (2004-09-29 17:59) [8]Ни разу не стоит.
Для хорошого сетевого сканера, вполне подходящий метод.
← →
Sha © (2004-09-29 18:27) [9]> vasechka (29.09.04 15:07)
ICS - это message-ориентированная библиотека.
Там никакие треды не нужны.
Сканер на твоих 500 на TWSocket-ах легко пишется
и прекрасно работает в основном потоке приложения.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c