![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Запущен некоторый процесс (например, calc.exe). Требуется приостановить работу разрабатываемого приложения до момента завершения указанного процесса (т.е. calc.exe) или до истечения заданного времени (используем события).
создала объек-событие, дескриптор которого будем использовать в вызове функции WaitForSingleObject:
а теперь мне не понятно, как привязаться к тому процессу, до завершения которого мы приостанавливаем работу разрабатываемого..? объясните пожалуйста, как это должно выглядеть..? Сообщение отредактировано: 18192123 - 2.11.2008 19:35 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Запущен некоторый процесс (например, calc.exe) Уточнение: этот процесс запускается твоей программой? Тогда запускай его в отдельном потоке (созданном через CreateThread)... Пример - см. здесь |
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
В таком случае тебе и Event на него нельзя ставить... Используй WaitForSingleObject с указанием максимального времени ожидания...
|
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата А почему нельзя...? Потому что: Цитата(Рихтер @ глава 9) Объекты-события обычно используют в том случае, когда какой-то поток выполняет инициализацию, а затем сигнализирует другому потоку, что тот может продолжить работу. Инициализирующий поток переводит объект "событие" в занятое состояние и приступает к своим операциям. Закончив, он сбрасывает событие в свободное состояние. Тогда другой поток, который ждал перехода события в свободное состояние, пробуждается и вновь становится планируемым. У тебя нет не то что потока, у тебя даже процесс чужой. Как ты из чужого процесса хочешь вызывать SetEvent? Подменять WndProc того же самого calc.exe? Сомневаюсь, что это входило в задание...Цитата И как мне указывать, что именно при завершении такого-то процесса возобновлять моё приложение...я так и не пойму... DWORD dw = WaitForSingleObject(process_ID, 15000); // Ждем 15 секунд или закрытия процесса(возможно потребуется получить дубликат PID с нужными правами...) Во время ожидания вызывающий процесс "замирает", после выхода из WaitFor... продолжает выполнение... |
18192123 |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
process_ID - это сторонний процесс...
|
18192123 |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Хочу получить дескриптор своего стороннего процесса (всё тот же calc.exe)...Возникла 6-я ошибка (дескриптор некорректный..)..Как это можно исправить, объясните пожалуйста..??
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата Как это можно исправить, объясните пожалуйста..?? Получать нужные права на процесс... Для использования WaitFor... необходимоHANDLE h = OpenProcess(SYNCHRONIZE, FALSE, PID);, а не права на запрос информации. |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 10:26 |