C/C++
Как запустить процессы, чтобы они работали пока программа не закрыта? с++
Написал программу на с++, которая в цикле выполняет консольные команды, по мере работы процессы выполнения команд открываются и закрываются. Как сделать чтобы они работали на протяжении работы программы? Скорее всего именно из-за постоянного перезапуска подлагивает компьютер
Чуть менее чем никак. Если процесс хочет завершиться, он это сделает и ты никак ему не сможешь помешать.
На самом деле способ есть. Это самое "желание" процесса закрыться можно перехватить при помощи системного крюка и поставить основную нить процесса на паузу. Только оно тебе туда не поможет - ну, будет у тебя куча подвисших процессов, толку-то...
Но! Нафига ж ты их вообще запискаешь? На C++ можно написать что угодно. Если там у тебя не какие-то космические программы запускаются, просто реализуй их функционал самостоятельно и все будет ехать плавненько.
На самом деле способ есть. Это самое "желание" процесса закрыться можно перехватить при помощи системного крюка и поставить основную нить процесса на паузу. Только оно тебе туда не поможет - ну, будет у тебя куча подвисших процессов, толку-то...
Но! Нафига ж ты их вообще запискаешь? На C++ можно написать что угодно. Если там у тебя не какие-то космические программы запускаются, просто реализуй их функционал самостоятельно и все будет ехать плавненько.
Александр Панов
Просто такая ситуация, что код выполняет команды из cmd, а другой реализации не нашёл
К сожалению из вашего вопроса не совсем понятно, чего вы хотите добиться.
Если вам нужно, чтобы ваши процессы после запуска выполнялись параллельно с запустившей их программой и она не дожидалась их завершения то это возможно, но реализация зависит от ОС. В нормальных операционных системах есть функция fork() которая порождает дочерний процесс в виде копии основного. Если после fork выполнить exec то этот дочерний процесс будет замещен новым и он будет выполняться параллельно с родительским. После завершения выполнения дочернего процесса остается специальная структура данных с результатами работы. Родительский процесс должен вызвать функцию из семейства wait для того, чтобы извлечь данные из этой структуры (ее еще называют зомби-процессом) и освободить ресурсы. Функция system, которой тут многие любят пользоваться, под капотом скрывает эти стадии, а так как она использует блокирующуюся версию wait то и выполнение родительского процесса приостанавливается до тех пор, пока не завершится процесс потомок. Чтобы такого не было, надо использовать waitpid примерно таким образом: waitpid( -1, &status, WNOHANG )
В Windows функции fork нет, поэтому вместо одной строчки вам придется написать страницу кода, чтобы затем выполнить функцию из семейства CreateProcess
А перед этим прочитать много-много страниц документации, чтобы понять особенности жизненного цикла процессов в этих "чудесных" ОС.
Если вам нужно, чтобы ваши процессы после запуска выполнялись параллельно с запустившей их программой и она не дожидалась их завершения то это возможно, но реализация зависит от ОС. В нормальных операционных системах есть функция fork() которая порождает дочерний процесс в виде копии основного. Если после fork выполнить exec то этот дочерний процесс будет замещен новым и он будет выполняться параллельно с родительским. После завершения выполнения дочернего процесса остается специальная структура данных с результатами работы. Родительский процесс должен вызвать функцию из семейства wait для того, чтобы извлечь данные из этой структуры (ее еще называют зомби-процессом) и освободить ресурсы. Функция system, которой тут многие любят пользоваться, под капотом скрывает эти стадии, а так как она использует блокирующуюся версию wait то и выполнение родительского процесса приостанавливается до тех пор, пока не завершится процесс потомок. Чтобы такого не было, надо использовать waitpid примерно таким образом: waitpid( -1, &status, WNOHANG )
В Windows функции fork нет, поэтому вместо одной строчки вам придется написать страницу кода, чтобы затем выполнить функцию из семейства CreateProcess
А перед этим прочитать много-много страниц документации, чтобы понять особенности жизненного цикла процессов в этих "чудесных" ОС.
Если правильно понял, то почему-бы не заюзать цикл в цикле, или например плодить дочерние процессы, рекурсия же наконец на сколько памяти хватит.
Похожие вопросы
- Некорректно работает написанная программа
- Как узнать, что дочерние потоки процесса запущены на разных процессорах или ядрах процессора?
- Программа на c++ не работает. Написать структуру и прочее. Подскажите, пожалуйста, что я делаю не так.
- С++ как запустить эту программу в консоли компьютера? Можете подробно объяснить?
- Не работает программа С++. Помогите, пожалуйста, найти и решить проблему!
- Помогите исправить программу на языке СИ, работает коряво.
- Структуры на языке С++ Скажите пожалуйста, почему не работает программа ,и как её исправить?
- Не работает транспонирование матрицы. Исправить программу
- Написать программу на языке Си
- Написать программу на с++