Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизПотоки и методы работы с ними. Найти похожие ветки
← →
noname:)) (2006-01-05 17:43) [0]Здравствуйте.
Есть следующий алгоритм.
В цикле запускается некоторое количество потоков в которых выполняются следующие действия
1. выполнятся пинг.
2. если пинг удачен то выполняется поиск общих ресурсов.
Всё бы ничего но при большом диапазоне адресов одновременно запускается большое количество потоков и в большинстве случаев это заканчивается ошибкой Thread Creation Error: Недостаточно памяти для обработки команды. Чую нужно както ограничить количество параллельно работающих потоков. Но как? С потоками я пока на ВЫ, поэтому надеюсь на Вашу помощь и опыт. Также интересует вопрос, как принудительно завершить работающие в данный момент потоки.
Если кто откликнется могу выслать или кинуть в форум кусок кода в котором создаются потоки.
← →
Игорь Шевченко © (2006-01-05 18:10) [1]
> 1. выполнятся пинг.
> 2. если пинг удачен то выполняется поиск общих ресурсов.
>
Направленность какая-то сомнительная. Обычно от подобных программ Firewall рекомендуют. Я бы не стал давать советы.
← →
isasa © (2006-01-05 18:44) [2]:)
Зачем так строго.
приблизительно, так...
где-то, в управляющем потоке.
var aThread: array of hThread;
Thstatus: integer;
...
SetLength(aThread, maxActiveThreads); // maxActiveThreads=10,20, по возможностям
во время перебора списка проверяем свободный поток
....
GetExitCodeThread(aThread[i], Thstatus);
if Thstatus<>STILL_ACTIVE then
новый поток
else <ждем, в рамках списка>
← →
TUser © (2006-01-05 19:20) [3]Удалено модератором. :)
Если это твои компьютеры (в твоей локалке) - то проблемм нет. Сканируй не все адреса, а только правильные, ты же их знаешь. А если не знаешь - то лезешь, куда не просят, и см. [1].
← →
noname:)) (2006-01-05 19:44) [4]Это как?
var aThread: array of hThread;
Thstatus: integer; i: integer;
begin
SetLength(aThread, 20);
for i:=0 to 200 do
begin
GetExitCodeThread(aThread[i], Thstatus);
if Thstatus<>STILL_ACTIVE then
hThread := TThread.Create("192.168.0." + inttostr(i));
else
//как это в рамках списка?
end;
end;
Тпа того? Чтото я не совсем понял...
Чую бред полный написал:)))))))))))))))))))))))))
Долго думал слать или не слать... Послал... Мож кто посмеётся:) Или поплачет:))
← →
TUser © (2006-01-05 19:55) [5]
> isasa © (05.01.06 18:44) [2]
Я бы что-то типа семафора смастерил.
← →
noname:)) (2006-01-05 19:56) [6]Пробовал. почемуто не помогло... Всё начинает работать медленнее и ошибка перестаёт появлятся....
← →
Eraser © (2006-01-05 22:10) [7]
> noname:)) (05.01.06 19:56) [6]
Значит плохо пробовал, насчёт семафора TUser правильно советует. Ставить его надо в цикле управляющего потока.
← →
GanibalLector © (2006-01-06 00:46) [8]Ограничивай кол-во потоков! Кстати, в дайджестах можно найти пул потоков от А.Panov"a.
← →
Игорь Шевченко © (2006-01-06 11:50) [9]TUser © (05.01.06 19:20) [3]
> Если это твои компьютеры (в твоей локалке) - то проблемм
> нет
Все равно есть проблемы. Зачем программно определять общие ресурсы ? В локалке можно и Explorer"ом посмотреть.
У меня outpost показывал довольно большое количество попыток за сеанс посмотреть мои общие ресурсы. Что в них такого интересного ?
← →
umbra © (2006-01-06 12:45) [10]2 Игорь Шевченко © (06.01.06 11:50) [9]
а чего ж они общие, если там смотреть нечего? [неуверенная улыбка]
← →
noname:)) (2006-01-08 15:34) [11]Ошибочка в пуле Панова... Точнее скорее всего это несовместимость версий делфи...
while (FJobs.Count<>0) and (NumThr<>-1) do
begin
if NumThr=-1 then Continue; //Нет свободных потоков
Thr := FPool.Items[NumThr];
Thr.isFree := False; //Флаг "Поток занят"
Job := FJobs.Pop; // ВОТ ТУТ Incompatible types: "PJob" and "string"
Thr.SetJob(Job^.Proc,Job.Parm); //Устанавливаем параметры для выполнения
Dispose(Job); //Освободить память
Thr.FEventExec.SetEvent; //Известить поток о готовности к выполнению
NumThr := GetFreeThr; //Получить номер свободного потока
end;
PJob=^TJob;
TJob=record
Proc: TProcThr; //клиентская процедура
Parm: Pointer; //параметры процедуры
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c