| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Остановка работы однопоточного приложения |
| Автор: s_r 28.5.2009, 18:01 |
| Я пишу некоторое консольное приложение на C++ (под Linux). Которое делает недюжие вычисления. И необходимо, чтобы программа от пользователя получала сообщение остановиться, останавливалась, выполняла некоторые финальные действия и закрывалась. Вот собственно все кроме того как отследить тот момент, когда пользователь сказал остановиться? У меня была мысль создавать дополнительный поток, который будет читать с клавиатуры команды (хотя не совсем понимаю как это будет работать), а основной поток отследит это и закроется. Но хотелось бы что-нибудь попроще и чтобы это точно работало. Как это можно сделать? |
| Автор: zim22 28.5.2009, 18:14 |
под Windows помогает комбинация клавиш CTRL+C насколько я помню эту комибацию можно отлавливать и реагировать нужным образом. |
| Автор: s_r 28.5.2009, 18:15 |
| Ну я подозреваю, что под линукс тоже можно отлавливать, но кто бы сказал как...:( |
| Автор: sdukshis 28.5.2009, 18:18 |
| Можно сделать через обработку сигнала. В программе должна быть функция обработчик сигнала. После чего можно обрабатывать, например, сигнал порождаемый Ctrl-С (SIGINT) Если программа работает в фоновом режиме, то сигналы можно отправлять так: kill SIGINT pid Подробней можно посмотреть здесь: http://www.cs.cf.ac.uk/Dave/C/node24.html |
| Автор: s_r 28.5.2009, 18:22 |
| К сожалению, в MPI когда прилоежние запускается через mpiexec, то Ctrl+C срабатывает для mpiexec, а не запускаемого приложения:( -------------------- В общем, поборол так: запускаю в одном терминале "mpiexec ...", поток на нужном узле выводит свой PID, а в другом терминале даю команду "kill -n 2 {PID}". Получилось то, что нужно, но хотелось бы элегантней решение... |