Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.196.184] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Это что, то есть, если я породил 4 миллиарда короткоживущих процессов, то надо перегружать ось для продложения работы? *кричит "Маздай! Маздай!" и одевает шкуру пингвина* |
Сообщ.
#17
,
|
|
|
Цитата Mr.Delphist @ Это что, то есть, если я породил 4 миллиарда короткоживущих процессов, то надо перегружать ось для продложения работы? Эсперимент надо провести;) |
Сообщ.
#18
,
|
|
|
Цитата Mr.Delphist @ Это что, то есть, если я породил 4 миллиарда короткоживущих процессов, то надо перегружать ось для продложения работы? Не надо утрировать. GetTickCount тоже выдает максимум 4 миллиарда мсек (~50 суток) непрерывной работы, а затем просто переходит на 0. Видимо и с PID тоже самое - искусственно ограничивать диапазон и повторять не имеет смысла, а если переполнится через несколько месяцев непрерывной работы, то и фиг с ним |
Сообщ.
#19
,
|
|
|
leo, проверяется легко.
В цикле стартуем краткосрочный процесс, запоминая его ID и не забывая все закрывать. Смотрим был уже такой или нет. IMHO, не так уж и много итераций понадобиться, дабы поймать повторение. P.S. Сама не пробовала, совсем времени нет сейчас |
Сообщ.
#20
,
|
|
|
Цитата Riply @ Сама не пробовала, совсем времени нет сейчас А откуда тогда уверенность, что "не так уж и много итераций понадобиться" ? |
Сообщ.
#21
,
|
|
|
Цитата leo @ А откуда тогда уверенность, что "не так уж и много итераций понадобиться" ? "И опыт, сын ошибок трудных" (с) Сто лет назад ловила глюк при построении дерева процессов (XP SP1) |
Сообщ.
#22
,
|
|
|
Вопрос: Как этой функцией (в начале темы) узнать Handle окна запущенной программы и вывести вместе с её PID ?
function StartProccess(const ExecutableName: string): DWORD; var StartupInfo: TStartupInfo; ProccessInfo: TProcessInformation; begin Result:= 0; FillChar(StartupInfo, sizeof(StartupInfo), 0); with StartupInfo do begin cb:= sizeof(StartupInfo); wShowWindow:= SW_RESTORE; end; FillChar(ProccessInfo, sizeof(ProccessInfo), 0); if (CreateProcess(PChar(ExecutableName), nil, nil, nil, false, 0, nil, nil, StartupInfo, ProccessInfo)) then begin Result:= ProccessInfo.dwProcessId; CloseHandle(ProccessInfo.hProcess); CloseHandle(ProccessInfo.hThread); end; end; В моём варианте использую её так: if OpenDialog1.Execute then begin ProgID:= StartProccess(OpenDialog1.FileName); end |
Сообщ.
#23
,
|
|
|
EnumWindows + GetWindowProcessID, но не забывать, что у любого процесса м.б. куча окон.
|