Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процессы и задания, Пример кода 
:(
    Опции темы
Baa
Дата 13.7.2003, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Вот есть такая замечательная штука, как Jobs, только используют её редко, а некоторые вообще о ней не знают.
Значит насстало время о ней узнать, ибо решил я рассказать про неё smile.gif
Зачем она нужна и с чем её едят... Вот предположим, ваш процесс создает огромное количество дочерних процессов... А как их всех завершить одним махом? Через цикл убивать терминейтом массив хендлов? Хм... не кажется вам, что что-то не то в этом методе? Чтож, и тут на сцену выходят задания (jobs), они позволяют ассоциировать множество процессов с заданием и соотв. управлять им как единым целым.
Рассмотрим на примере:
Запустим две программы, привяжим их к заданию и потом дадим команду на терминацию задания (со всеми процессами, которые к нему привязаны).
Код

HANDLE hProcesses [2];
STARTUPINFO si;
   PROCESS_INFORMATION pi;

   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );

   // Start the child process.
   if( !CreateProcess( NULL, // No module name (use command line).
 "e:\\ipscan.exe", // Command line.
       NULL,             // Process handle not inheritable.
       NULL,             // Thread handle not inheritable.
       FALSE,            // Set handle inheritance to FALSE.
       0,                // No creation flags.
       NULL,             // Use parent's environment block.
       NULL,             // Use parent's starting directory.
       &si,              // Pointer to STARTUPINFO structure.
       &pi )             // Pointer to PROCESS_INFORMATION structure.
   )
   {
       return 0;
   }

hProcesses [0] = pi.hProcess;

ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );

// Start the child process.
   if( !CreateProcess( NULL, // No module name (use command line).
 "e:\\browmon.exe", // Command line.
       NULL,             // Process handle not inheritable.
       NULL,             // Thread handle not inheritable.
       FALSE,            // Set handle inheritance to FALSE.
       0,                // No creation flags.
       NULL,             // Use parent's environment block.
       NULL,             // Use parent's starting directory.
       &si,              // Pointer to STARTUPINFO structure.
       &pi )             // Pointer to PROCESS_INFORMATION structure.
   )
   {
       return 0;
   }

hProcesses [1] = pi.hProcess;
HANDLE hJob;

try {

//создаем объект задания
 hJob = CreateJobObject (NULL, "1");
 if (hJob == INVALID_HANDLE_VALUE) throw 1;
//привязываем процессы
 if(!AssignProcessToJobObject (hJob, hProcesses [0])) throw 2;
 if(!AssignProcessToJobObject (hJob, hProcesses [1])) throw 2;
} catch (int e)
{
 switch (e) {
  case 1: printf ("Can\'t create job object\n"); break;
  case 2:
   printf ("Can\'t assign on of two processes to job\n");
   CloseHandle (hJob);
   break;
  default: printf ("Something terrible happened. Unhandled handled exception;)");
 }
 CloseHandle (hProcesses[0]);
 CloseHandle (hProcesses[1]);
 return 0;
}
Sleep (5000);
//завершаем заданием (вместе с привязанными процессами)
TerminateJobObject (hJob, 0);
   CloseHandle (hJob);



--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 14.7.2003, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Baa, спасибо тебе за просвещения, мне это пригодиться,

А теперь скажи как написать програмку, что бы она закрывала все однотипные процессы, типа хп, закрывает все ексели... или другие мди-ные проги.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Baa
Дата 14.7.2003, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Че-то я не понял... что значит однотипные? да и к томе же еще и мди-ные?
Наерно это отдельная тема уже... создавай отдельный топик и описывай конкретней smile.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 14.7.2003, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Baa в хп когда открыто несколько документов ворда, то на нижней панельки одна кнопка-при нажатие на которую появляется список. так вот можно закрыть только один екземпляр, а можно сразу все.... сколько документов не открывай они будут в списке....


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Baa
Дата 14.7.2003, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Вобщем сделаем проще, ты скажи по каким критериям поубивать процессы, а уж поубиваем мы их вместе wink.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 14.7.2003, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Baa спасибо, убивать нужно все екземпляры екселя, ворда, студии, ну и все пока.... только не надо финдвиндо, клозе, в цикле, не люблю я это....


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
SCHEPA
Дата 14.7.2003, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 7.6.2003
Где: Н.Н.

Репутация: нет
Всего: нет



Step: я правильно понял, что хп - XP (в смысле WinXp). А с убыванием процессов все проще: система колбасит главный процесс, который в свою очередь колбасит всех своих, которых он наплодил. Это как мне кажется.
--------------------
Так что в лучших книгах всегда нет имен...
PM MAIL   Вверх
RAN
Дата 15.7.2003, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



SCHEPA, сомневаюсь, что это так. Мне кажется группа формируется по общему для всех процессов exe-шнику. И, наверное, закрывается именно циклом. Если конечно в XP нет специальных API функций.
Кстати, интересно, а что нового в WinAPI в XP. Надо создать тему.
PM MAIL ICQ   Вверх
Step
Дата 16.7.2003, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



SCHEPA ты явно не прав, так как в других виндах заколбашывания не происходит


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
ziga
Дата 31.7.2003, 16:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











job kernel objekti pojavilljisj toljko s win2000, poetomu, jeslji nado pisatj dlja NT, w9x to prihodjitsa izvraschatsa....sad.gif
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1067 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.