Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать количество потоков работающих в данный момент времени [D6, XP]


Страницы:   1 2 3

image ©   (2006-11-10 01:53:00) 

При написании многопотокового сканера сети, столкнулся с такой проблеммой. Программа создает 255 потоков, которые производят пинг (использую библиотеку компонентов ics - Ping). За 2-3 сек выводит IP-адреса найденных ПК, Timeout-ы и имена ПК, но результаты нестабильные, создается впечатление что потоки мешают друг другу.     Нестабильность проявляется в том, что количество найденных ПК колеблется, и чем слабее ПК, тем больше разница.  Я думаю что необходимо проконтролировать количество одновременно запущенных потоков, т.е. ограничить их количество  например до 16-32, но незнаю как это сделать. Подскажите пожалуйста как создать счетчик запущенных процессов


Джо   (2006-11-10 03:16:00) [41]

> [9] Ketmar ©   (10.11.06 03:13)
> всё б тебе классами делать...

А мне — нравится! ;-p


Ketmar   (2006-11-10 03:13:00) [42]

>[7] Джо(c) 10-Nov-2006, 03:11
>Ну, так создай специальный класс-менеджер потоков.
всё б тебе классами делать... %-) я вот в DarkEyeProxy безо всяких классов обошёлся -- и ничего. %-)


Ketmar   (2006-11-10 03:12:00) [43]

обалдеть. спрячь. а лучше сожги.
а) на кой фиг определять имя в отдельном потоке, если пинг уже закончен? можно тот же самый использовать;
б) понятно, что в цикле. как это мешает иметь счётчик?


Джо   (2006-11-10 03:11:00) [44]

> [6] image   (10.11.06 03:05)

Ну, так создай специальный класс-менеджер потоков. Пускай он их и создает и считает, при необходимости откладывая создание следующего. В чем проблема-то?


image   (2006-11-10 03:05:00) [45]

>пардон, нафига тебе счётчик процессов? считай потоки. ты создаёшь -- ты >и считай. с Inc() и Dec() знаком?

  Дело в том, что потоки у меня создаются в цикле, вводишь диапазон адресов и пуск, а я хочу сделать так, чтобы можно было контролировать количество создаваемых потоков. Создал 16 потоков ждешь. Как только один поток из 16 отработал, тут же создаешь следующий.
 И там у меня еще если ПК найден, то тут же создается поток, который определяет имя ПК. Получается если найдено 255 ПК то создаются 255 потоков определяющих их имена. 500 потоков многовато.


Ketmar   (2006-11-10 02:56:00) [46]

>[4] MikePetrichenko(c) 10-Nov-2006, 02:48
>Я его даже добью:
"голосы за кадром: убыв, убыв!" (ц) Л.П.

>P.S. Только не спрашивай откуда это и почему именно так.
не буду. мне и без пояснений уже страшно. %-)


MikePetrichenko   (2006-11-10 02:48:00) [47]


> не пугай человека. %-)

Хай привыкает.
Я его даже добью:

Semaphore := CreateSemaphore(nil, 4, 4, nil);

for Loop := 0 to FDevices.Count - 1 do
 with FTask do
   Threads.Add(TSendThread.Create(Path, FDevices[Loop], Message.Files, Settings.vCard.Get, Settings.vCard.Put, vCardFileName, Semaphore, FTask.Message.ID));

 while Threads.Count > 0 do begin
   TThread(Threads[0]).WaitFor;
   Threads.Delete(0);
 end;

 CloseHandle(Semaphore);


И в потоке по завершению:


ReleaseSemaphore(FSemaphore, 1, nil);


P.S. Только не спрашивай откуда это и почему именно так. Долго буду объяснять.


Ketmar   (2006-11-10 02:41:00) [48]

>[2] MikePetrichenko(c) 10-Nov-2006, 02:38
>Пользуй семафор
не пугай человека. %-)


MikePetrichenko   (2006-11-10 02:38:00) [49]


> ограничить их количество  например до 16-32

Пользуй семафор


Ketmar   (2006-11-10 02:31:00) [50]

пардон, нафига тебе счётчик процессов? считай потоки. ты создаёшь -- ты и считай. с Inc() и Dec() знаком?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо