Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Пауза в потоках   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
6-1096052283
ildar_kh
2004-09-24 22:58
2004.12.05
Отладчик РНР


1-1101281831
Tria
2004-11-24 10:37
2004.12.05
Проблема с mdi окнами.


14-1100692895
Ega23
2004-11-17 15:01
2004.12.05
А что есть OnClick?


1-1101223880
kaktus
2004-11-23 18:31
2004.12.05
полосотый DBGrid


4-1098638436
VZup
2004-10-24 21:20
2004.12.05
Фильтр OpenDialog a