IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Использование WaitForSignleObject, VC++ 2008 EE
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Запущен некоторый процесс (например, calc.exe). Требуется приостановить работу разрабатываемого приложения до момента завершения указанного процесса (т.е. calc.exe) или до истечения заданного времени (используем события).

создала объек-событие, дескриптор которого будем использовать в вызове функции WaitForSingleObject:

HANDLE hEvent=CreateEvent(NULL,
TRUE,
TRUE,
TEXT("MyEvent"));


а теперь мне не понятно, как привязаться к тому процессу, до завершения которого мы приостанавливаем работу разрабатываемого..? объясните пожалуйста, как это должно выглядеть..?

Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Запущен некоторый процесс (например, calc.exe)
Уточнение: этот процесс запускается твоей программой? Тогда запускай его в отдельном потоке (созданном через CreateThread)... Пример - см. здесь
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 2.11.2008 21:19) *

Уточнение: этот процесс запускается твоей программой?

Нет, этот процесс моей программой не запускается
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






В таком случае тебе и Event на него нельзя ставить... Используй WaitForSingleObject с указанием максимального времени ожидания...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 2.11.2008 22:20) *

В таком случае тебе и Event на него нельзя ставить...

А почему нельзя...?
И как мне указывать, что именно при завершении такого-то процесса возобновлять моё приложение...я так и не пойму...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
А почему нельзя...?
Потому что:
Цитата(Рихтер @ глава 9)
Объекты-события обычно используют в том случае, когда какой-то поток выполняет инициализацию, а затем сигнализирует другому потоку, что тот может продолжить работу. Инициализирующий поток переводит объект "событие" в занятое состояние и приступает к своим операциям. Закончив, он сбрасывает событие в свободное состояние. Тогда другой поток, который ждал перехода события в свободное состояние, пробуждается и вновь становится планируемым.
У тебя нет не то что потока, у тебя даже процесс чужой. Как ты из чужого процесса хочешь вызывать SetEvent? Подменять WndProc того же самого calc.exe? Сомневаюсь, что это входило в задание...

Цитата
И как мне указывать, что именно при завершении такого-то процесса возобновлять моё приложение...я так и не пойму...

DWORD dw = WaitForSingleObject(process_ID, 15000); // Ждем 15 секунд или закрытия процесса
// анализируешь dw для выяснения причины выхода из WaitForSingleObject
(возможно потребуется получить дубликат PID с нужными правами...)

Во время ожидания вызывающий процесс "замирает", после выхода из WaitFor... продолжает выполнение...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 2.11.2008 23:40) *

DWORD dw = WaitForSingleObject(process_ID, 15000); // Ждем 15 секунд или закрытия процесса
// анализируешь dw для выяснения причины выхода из WaitForSingleObject


process_ID - это чей дескриптор? вызывающего приложения или стороннего?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






process_ID - это сторонний процесс...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Хочу получить дескриптор своего стороннего процесса (всё тот же calc.exe)...Возникла 6-я ошибка (дескриптор некорректный..)..Как это можно исправить, объясните пожалуйста..??


HANDLE h=OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,PID);//результат операции - 0, PID-
//идентификатор стороннего процесса
DWORD Err=GetLastError();
DWORD dw = WaitForSingleObject(h, 15000); // Ждем 15 секунд или закрытия процесса

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
Как это можно исправить, объясните пожалуйста..??
Получать нужные права на процесс... Для использования WaitFor... необходимо
HANDLE h = OpenProcess(SYNCHRONIZE, FALSE, PID);
, а не права на запрос информации.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.10.2021 7:36
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name