![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| eugenius |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
У меня возникла вот такая вот проблема:
Задача состоит в том, чтобы непрерывно в цикле создавать процесс, а потом валить его . Как при этом избежать роста числа дескрипторов в системе? Оставив свою прогу на ночь .утром я обнаружил совершенно немыслимое число дескрипторов в таск менеджере,и, есссно, свободная виптуальная память системы закончилась. Количество потоков и процессов осталось на прежнем уровне. Посмотрите на мой код, написанный ниже. Что я делаю не так???? Спасибо while (true) { STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; if (!CreateProcess("c:\\windows\\notepad.exe", "c:\\windows\\notepad.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE|NORMAL_PRIORITY_CLASS, NULL, NULL, &si, pi)) { wprintf(L"Failed to create process\n"); break; } else wprintf(L"Process created successfully\n"); Sleep(100); UINT exitcode = 0; TerminateProcess(pi->hProcess, exitcode); WaitForSingleObject(pi->hProcess, INFINITE ); CloseHandle(pi->hProcess); CloseHandle(pi->hThread); } |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Почитай внимательно о CreateProcess в MSDN:
BOOL CreateProcess( . . . LPPROCESS_INFORMATION lpProcessInformation ); Parameters . . . lpProcessInformation Pointer to a PROCESS_INFORMATION structure that receives identification information about the new process. Handles in PROCESS_INFORMATION must be closed with CloseHandle when they are no longer needed. Это сообщение отредактировал(а) 0x07L - 22.9.2006, 19:52 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
0x07L,
тут дело в чем-то еще. в чем именно - непонятно, потому как приведен не тот код, который реально всю ночь создавал утечку хэндлов, а некий обрезок, который содержит ошибки синтаксиса, а при исправлении оных работает правильно и никаких утечек не производит... |
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Да, я опять пытался ответить на вопрос, не прочитав его полностью... Просто вспомнился случай из ранней практики, когда я не закрывал handle и потом удивлялся, почему количество дескрипторов увеличивается. Думал, и тут то же самое. Просто не знаю другой причины, почему могут утекать дескрипторы.
Проверил работу программы у себя: вроде все ок. Кстати, недавно наткнулся на утечку ресурсов из стандартного диалога открытия файлов. Оказалось, такая штука происходит только у меня, хотя исполняемый файл - один и тот же. Может, и здесь то же самое - локальный глюк системы? |
|||
|
||||
| lemax |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 14.10.2007 Репутация: нет Всего: 1 |
Тема стара, но добавлю
В книжке msdn сказано что TerminateProcess тупо выкидывает процес из памяти. Поэтому [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме], оставленное неожиданно выкинутым процессом, подтирать некому. Там так и напис(санно). Поэтому применять эту TerminateProcess рекомендуют только в крайних случаях. И кстать, убиенному процессу об этом событии даже не сообщается. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |