Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.043 c
8-1094308103
AndersoNRules
2004-09-04 18:28
2004.12.05
Flash &amp; Delphi


1-1101145900
Dmitry_04
2004-11-22 20:51
2004.12.05
Подскажите пожалуйста по поводу модуля Menus


1-1101111515
BaDeVlad
2004-11-22 11:18
2004.12.05
Непечатаемые символы в RichEdit


1-1101138036
denis24
2004-11-22 18:40
2004.12.05
динамическое создание визуальных компонентов на форме


4-1098081869
Slonco
2004-10-18 10:44
2004.12.05
Как оборвать проигрывание звука при помощи кнопки?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский