Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
ВнизПотоки Найти похожие ветки
← →
Res (2007-12-05 16:15) [0]Здравствуйте! Подскажите пожалуйста как узнать количество запущенных потоков?
← →
Сергей М. © (2007-12-05 16:19) [1]Смотря какая ОС.
← →
res (2007-12-05 16:20) [2]Win XP
← →
Юрий Зотов © (2007-12-05 16:21) [3]Если Вы запускаете их сами, то введите счетчик. Если нет, то: http://www.pcreview.co.uk/forums/thread-2619677.php
← →
res (2007-12-05 16:22) [4]Запускаю сам, мне необходимо узнать кол-во живых из запущенных :)
← →
Юрий Зотов © (2007-12-05 16:26) [5]> res (05.12.07 16:22) [4]
var
ThreadCount: integer = 0;
procedure TMyThread.Execute;
begin
Inc(ThreadCount);
try
....
finallly
Dec(ThreadCount);
end
end;
← →
Сергей М. © (2007-12-05 16:27) [6]Ну, предположим, ты сделал перекличку "живых".
Что дальше ? Какова цель прведения этой "переклички" (или, если угодно, ревизии) ?
← →
Юрий Зотов © (2007-12-05 16:28) [7]Поправка:
Изменять ThreadCount надо через Synchronize.
← →
Джо © (2007-12-05 16:28) [8]> [5] Юрий Зотов © (05.12.07 16:26)
InterlockedIncrement
InterlockedDecrement.
← →
res (2007-12-05 16:29) [9]Мне нужно если живых 0, то form1.Timer1.Enabled:=True;
← →
Palladin © (2007-12-05 16:30) [10]
> Юрий Зотов © (05.12.07 16:28) [7]
а можно и через InterlockedDecrement и Increment :)
← →
Юрий Зотов © (2007-12-05 16:30) [11]> Джо © (05.12.07 16:28) [8]
Точно. Забыл о них.
← →
DrPass © (2007-12-05 16:32) [12]
> Юрий Зотов © (05.12.07 16:28) [7]
> Поправка:
>
> Изменять ThreadCount надо через Synchronize.
Зачем? Это ж атомарная операция, здесь конфликт просто невозможен
← →
Сергей М. © (2007-12-05 16:32) [13]
> Изменять ThreadCount
После модификации ThreadCount поток еще жив, игнорирование этого факта м.б. критично в ряде случаев.
← →
Сергей М. © (2007-12-05 16:33) [14]
> DrPass © (05.12.07 16:32) [12]
> здесь конфликт просто невозможен
Возможен.
Это неоднократно обсуждалось в форуме.
← →
Palladin © (2007-12-05 16:36) [15]И у Рихтера тоже, насколько я помню, обсуждалось, надо глянуть...
← →
Джо © (2007-12-05 16:39) [16]Кстати, сижу щас смотрю Remarks по этим функциям. Ограничения интересные там. Лично я никогда проблем с ними не огребал, но на будущее подумаю, не использовать ли взамен InterlockedIncrementAcquire & InterlockedIncrementRelease.
← →
Джо © (2007-12-05 16:41) [17]Хотя, скорее всего, там крит. секции используются внутри, так что иногда может и лучше это делать «руками».
← →
Palladin © (2007-12-05 16:47) [18]АФАИК, наоборот, критические секции как раз и используют их для своего внутреннего счетчика...
← →
Rouse_ © (2007-12-05 18:03) [19]
> мне необходимо узнать кол-во живых из запущенных
В смысле, засуспенден или нет?
← →
KSergey © (2007-12-05 19:05) [20]А что есть "живые потоки" в вашем понимании?
Это к автору.
← →
KSergey © (2007-12-05 19:06) [21]А вообще занятно наблюдать интеллигентную беседу, простите, голубых :)
← →
Rouse_ © (2007-12-05 20:35) [22]
> А что есть "живые потоки" в вашем понимании?
Естественно есть, раз могут быть "мертвые" :)
К примеру если смотреть в ХР (в отличие от 2000) то (начиная с оффсета в TEB fs:[124] - где лежит указатель на CurrentThread) ситуация будет выглядеть так: fs:[124] -> ThreadsProcess -> ThreadListHead будет хранить данные по всем потокам приложения выполнявшимся в течении его жизни, у них просто будет выставленно State = Terminated. Это мертвые потоки :) А живые - это те которые живые, даже если и засуспенженны :)
Вот здесь вторая глава очень интересная :)
http://www.wasm.ru/print.php?article=packers2#2
← →
Dennis I. Komarov © (2007-12-06 10:09) [23]> [21] KSergey © (05.12.07 19:06)
Розыча и Сергея М не успели туда добавить :)
← →
KSergey © (2007-12-06 14:35) [24]> Rouse_ © (05.12.07 20:35) [22]
> > А что есть "живые потоки" в вашем понимании?
>
> Естественно есть, раз могут быть "мертвые" :)
Я имел в виду уточнить у автора что такое в его понимании "живые потоки". А то мало ли...
Впрочем, ему это все, очевидно, уже не интересно.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c