> Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу. > И потом продолжить её выполнение. > Под Win2000. > > Метод изменения приоретета на IDLE и запуска какого-нибудь цикла с бОльшим приоритетом не является панацеей. > > Буду очень благодарен за ответы.
может SuspendThread ?
Posted via RSDN NNTP Server 1.7 "Bedlam"
Re[2]: Как приостановить выполнение другой программы (pause)
Здравствуйте, 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, Вы писали:
SM>>Здравствуйте, Othello, Вы писали:
>>>> Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу. >>>> И потом продолжить её выполнение. >>>> Под Win2000. O>>>может SuspendThread ?
SM>>но на все thread процесса
А>А как получить именно все процессы данного приложения? (не разу не сталкивался)
гм, я что-то не понял. Есть процесс (process) (если мы о Windows), у него могут быть thread'ы.
Чтобы остановить процесс, надо приостановить все его thread. Про приложения речи не было.
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[4]: Как приостановить выполнение другой программы (pause)
Здравствуйте, SergeMukhin, Вы писали:
SM>Здравствуйте, Othello, Вы писали:
>>> Интересует как при помощи Win API приостановить выполнение другой программы т.е. поставить её на паузу. >>> И потом продолжить её выполнение. >>> Под Win2000. O>>может SuspendThread ?
SM>но на все thread процесса
SuspendThread конечно подвесит, но что произойдет, если логика приложения не рассчитана на такое? Т.е. я хочу сказать, что если в приложении несколько завязанных друг на друга потоков то вызывая SuspendThread в цикле можно попасть в ситуацию, что один уже висит, а тот который с ним работает еще нет и поведение программы будет непредсказуемым.
Re[4]: Как приостановить выполнение другой программы (pause)
SM>>но на все thread процесса
V>SuspendThread конечно подвесит, но что произойдет, если логика приложения не рассчитана на такое? Т.е. я хочу сказать, что если в приложении несколько завязанных друг на друга потоков то вызывая SuspendThread в цикле можно попасть в ситуацию, что один уже висит, а тот который с ним работает еще нет и поведение программы будет непредсказуемым.
обязательно! но верояность чрезвычайно мала, т.к. когда один tread работает, другой все равно уже стоит (за искл многопроцессорных систем), т.е. создать такую ситуацию очеь сложно, опять же и thread который всех останавливает тоже работает (а другие стоят ждут очереди).
чтобы минимзировать вероятность этого, можно дать повышенный приоритет на врему suspend'ов.
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[5]: Как приостановить выполнение другой программы (pause)
Здравствуйте, SergeMukhin, Вы писали:
SM>Здравствуйте, vadim77, Вы писали:
SM>>>но на все thread процесса
V>>SuspendThread конечно подвесит, но что произойдет, если логика приложения не рассчитана на такое? Т.е. я хочу сказать, что если в приложении несколько завязанных друг на друга потоков то вызывая SuspendThread в цикле можно попасть в ситуацию, что один уже висит, а тот который с ним работает еще нет и поведение программы будет непредсказуемым.
SM>обязательно! но верояность чрезвычайно мала, т.к. когда один tread работает, другой все равно уже стоит (за искл многопроцессорных систем), т.е. создать такую ситуацию очеь сложно, опять же и thread который всех останавливает тоже работает (а другие стоят ждут очереди). SM>чтобы минимзировать вероятность этого, можно дать повышенный приоритет на врему suspend'ов.
Ситуация еще более усложнилась,
Поковырявшись, понял что пауза потока не пройдет, т.к. надо чтобы порт отвечал периодически на запросы агента. Иначе всё упадет по TimeOut.
Вот задачка...
Привет!
> Поковырявшись, понял что пауза потока не пройдет, т.к. надо чтобы порт отвечал периодически на запросы агента. Иначе всё упадет по TimeOut. > Вот задачка...
NtSuspendProcess, хотя и не документирована. XP, думаю, что и W2003.
Ранше — не знаю.
V>SuspendThread конечно подвесит, но что произойдет, если логика приложения не рассчитана на такое? Т.е. я хочу сказать, что если в приложении несколько завязанных друг на друга потоков то вызывая SuspendThread в цикле можно попасть в ситуацию, что один уже висит, а тот который с ним работает еще нет и поведение программы будет непредсказуемым.
А когда "у приложения забирают процессорное время" — всё и останавливается... не зависимо от того хочет оно того или нет. Так что это исключительно проблемы проектирования. Хотя пока мне сложно придумать такую ситуацию.
... << RSDN@Home 1.1.0 stable >>
Re[6]: Как приостановить выполнение другой программы (pause)
S_>Ситуация еще более усложнилась, S_>Поковырявшись, понял что пауза потока не пройдет, т.к. надо чтобы порт отвечал периодически на запросы агента. Иначе всё упадет по TimeOut. S_>Вот задачка...
А можно услышать задачку целиком? Может будет понятнее
... << RSDN@Home 1.1.0 stable >>
Re[7]: Как приостановить выполнение другой программы (pause)
Здравствуйте, Denis, Вы писали:
S_>>Ситуация еще более усложнилась, S_>>Поковырявшись, понял что пауза потока не пройдет, т.к. надо чтобы порт отвечал периодически на запросы агента. Иначе всё упадет по TimeOut. S_>>Вот задачка...
D>А можно услышать задачку целиком? Может будет понятнее
Есть такая прога Segue SilkTest для автоматического тестирования,
всем хороша — но нету паузы. Т.е. если скрипт большой, то доступа к компу не будет очень долго.
У неё есть агент, который работает типа Backdoor, etc.
Каждую секунду (может чаще, но вроде секунду) они обмениваются данными, если обмен не проходит определенное время — всё падает.
Поэтому, как я полагаю, надо в своей проге посылать агенту нулевую команду типа sleep, а Silk отправлять в суспенд.
Сейчас разбираюсь с протоколом ихнего обмена.
Если есть какие другие идеи — предлагайте.
При суспенде агента — все падает на всегда.