Как приостановить выполнение другой программы (pause)
От: Shark_raph Беларусь shark-raph.by.ru
Дата: 12.02.04 12:27
Оценка:
Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу.
И потом продолжить её выполнение.
Под Win2000.

Метод изменения приоретета на IDLE и запуска какого-нибудь цикла с бОльшим приоритетом не является панацеей.

Буду очень благодарен за ответы.
Re: Как приостановить выполнение другой программы (pause)
От: Othello  
Дата: 12.02.04 12:30
Оценка:
> Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу.
> И потом продолжить её выполнение.
> Под Win2000.
>
> Метод изменения приоретета на IDLE и запуска какого-нибудь цикла с бОльшим приоритетом не является панацеей.
>
> Буду очень благодарен за ответы.
может SuspendThread ?
Posted via RSDN NNTP Server 1.7 "Bedlam"
Re[2]: Как приостановить выполнение другой программы (pause)
От: SergeMukhin Россия  
Дата: 12.02.04 12:38
Оценка:
Здравствуйте, Othello, Вы писали:

>> Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу.

>> И потом продолжить её выполнение.
>> Под Win2000.
O>может SuspendThread ?

но на все thread процесса
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[3]: Как приостановить выполнение другой программы (pause)
От: Аноним  
Дата: 12.02.04 13:01
Оценка:
Здравствуйте, SergeMukhin, Вы писали:

SM>Здравствуйте, Othello, Вы писали:


>>> Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу.

>>> И потом продолжить её выполнение.
>>> Под Win2000.
O>>может SuspendThread ?

SM>но на все thread процесса


А как получить именно все процессы данного приложения? (не разу не сталкивался)
Re[4]: Как приостановить выполнение другой программы (pause)
От: SergeMukhin Россия  
Дата: 12.02.04 13:13
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, SergeMukhin, Вы писали:


SM>>Здравствуйте, Othello, Вы писали:


>>>> Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу.

>>>> И потом продолжить её выполнение.
>>>> Под Win2000.
O>>>может SuspendThread ?

SM>>но на все thread процесса


А>А как получить именно все процессы данного приложения? (не разу не сталкивался)


гм, я что-то не понял. Есть процесс (process) (если мы о Windows), у него могут быть thread'ы.
Чтобы остановить процесс, надо приостановить все его thread. Про приложения речи не было.
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[4]: Как приостановить выполнение другой программы (pause)
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 12.02.04 13:43
Оценка:
воспользоваться:
CreateToolhelp32Snapshot
OpenThread
Thread32First
Thread32Next

Denis
... << RSDN@Home 1.1.0 stable >>
Re[3]: Как приостановить выполнение другой программы (pause)
От: vadim77 Израиль  
Дата: 13.02.04 11:24
Оценка: +1 -1
Здравствуйте, SergeMukhin, Вы писали:

SM>Здравствуйте, Othello, Вы писали:


>>> Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу.

>>> И потом продолжить её выполнение.
>>> Под Win2000.
O>>может SuspendThread ?

SM>но на все thread процесса


SuspendThread конечно подвесит, но что произойдет, если логика приложения не рассчитана на такое? Т.е. я хочу сказать, что если в приложении несколько завязанных друг на друга потоков то вызывая SuspendThread в цикле можно попасть в ситуацию, что один уже висит, а тот который с ним работает еще нет и поведение программы будет непредсказуемым.
Re[4]: Как приостановить выполнение другой программы (pause)
От: SergeMukhin Россия  
Дата: 13.02.04 11:57
Оценка:
Здравствуйте, vadim77, Вы писали:


SM>>но на все thread процесса


V>SuspendThread конечно подвесит, но что произойдет, если логика приложения не рассчитана на такое? Т.е. я хочу сказать, что если в приложении несколько завязанных друг на друга потоков то вызывая SuspendThread в цикле можно попасть в ситуацию, что один уже висит, а тот который с ним работает еще нет и поведение программы будет непредсказуемым.


обязательно! но верояность чрезвычайно мала, т.к. когда один tread работает, другой все равно уже стоит (за искл многопроцессорных систем), т.е. создать такую ситуацию очеь сложно, опять же и thread который всех останавливает тоже работает (а другие стоят ждут очереди).
чтобы минимзировать вероятность этого, можно дать повышенный приоритет на врему suspend'ов.
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[5]: Как приостановить выполнение другой программы (pause)
От: Shark_raph Беларусь shark-raph.by.ru
Дата: 13.02.04 12:05
Оценка:
Здравствуйте, SergeMukhin, Вы писали:

SM>Здравствуйте, vadim77, Вы писали:



SM>>>но на все thread процесса


V>>SuspendThread конечно подвесит, но что произойдет, если логика приложения не рассчитана на такое? Т.е. я хочу сказать, что если в приложении несколько завязанных друг на друга потоков то вызывая SuspendThread в цикле можно попасть в ситуацию, что один уже висит, а тот который с ним работает еще нет и поведение программы будет непредсказуемым.


SM>обязательно! но верояность чрезвычайно мала, т.к. когда один tread работает, другой все равно уже стоит (за искл многопроцессорных систем), т.е. создать такую ситуацию очеь сложно, опять же и thread который всех останавливает тоже работает (а другие стоят ждут очереди).

SM>чтобы минимзировать вероятность этого, можно дать повышенный приоритет на врему suspend'ов.

Ситуация еще более усложнилась,
Поковырявшись, понял что пауза потока не пройдет, т.к. надо чтобы порт отвечал периодически на запросы агента. Иначе всё упадет по TimeOut.
Вот задачка...
Re[6]: Как приостановить выполнение другой
От: Pavel Dvorkin Россия  
Дата: 13.02.04 12:08
Оценка:
Привет!

> Поковырявшись, понял что пауза потока не пройдет, т.к. надо чтобы порт отвечал периодически на запросы агента. Иначе всё упадет по TimeOut.

> Вот задачка...

NtSuspendProcess, хотя и не документирована. XP, думаю, что и W2003.
Ранше — не знаю.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[7]: Как приостановить выполнение другой
От: Pavel Dvorkin Россия  
Дата: 13.02.04 12:12
Оценка:
Дополнительно.

> Ранше — не знаю.


Сорри за опечатку

NtSuspendProcess(hProcess);
NtResumeProcess(hProcess);


--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[4]: Как приостановить выполнение другой программы (pause)
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 13.02.04 12:22
Оценка:
V>SuspendThread конечно подвесит, но что произойдет, если логика приложения не рассчитана на такое? Т.е. я хочу сказать, что если в приложении несколько завязанных друг на друга потоков то вызывая SuspendThread в цикле можно попасть в ситуацию, что один уже висит, а тот который с ним работает еще нет и поведение программы будет непредсказуемым.

А когда "у приложения забирают процессорное время" — всё и останавливается... не зависимо от того хочет оно того или нет. Так что это исключительно проблемы проектирования. Хотя пока мне сложно придумать такую ситуацию.
... << RSDN@Home 1.1.0 stable >>
Re[6]: Как приостановить выполнение другой программы (pause)
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 13.02.04 12:22
Оценка:
S_>Ситуация еще более усложнилась,
S_>Поковырявшись, понял что пауза потока не пройдет, т.к. надо чтобы порт отвечал периодически на запросы агента. Иначе всё упадет по TimeOut.
S_>Вот задачка...

А можно услышать задачку целиком? Может будет понятнее
... << RSDN@Home 1.1.0 stable >>
Re[7]: Как приостановить выполнение другой программы (pause)
От: Shark_raph Беларусь shark-raph.by.ru
Дата: 13.02.04 13:32
Оценка:
Здравствуйте, Denis, Вы писали:

S_>>Ситуация еще более усложнилась,

S_>>Поковырявшись, понял что пауза потока не пройдет, т.к. надо чтобы порт отвечал периодически на запросы агента. Иначе всё упадет по TimeOut.
S_>>Вот задачка...

D>А можно услышать задачку целиком? Может будет понятнее


Есть такая прога Segue SilkTest для автоматического тестирования,
всем хороша — но нету паузы. Т.е. если скрипт большой, то доступа к компу не будет очень долго.
У неё есть агент, который работает типа Backdoor, etc.
Каждую секунду (может чаще, но вроде секунду) они обмениваются данными, если обмен не проходит определенное время — всё падает.
Поэтому, как я полагаю, надо в своей проге посылать агенту нулевую команду типа sleep, а Silk отправлять в суспенд.
Сейчас разбираюсь с протоколом ихнего обмена.

Если есть какие другие идеи — предлагайте.
При суспенде агента — все падает на всегда.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.