Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Остановка работы однопоточного приложения


Автор: s_r 28.5.2009, 18:01
Я пишу некоторое консольное приложение на C++ (под Linux). Которое делает недюжие вычисления. И необходимо, чтобы программа от пользователя получала сообщение остановиться, останавливалась, выполняла некоторые финальные действия и закрывалась.
Вот собственно все кроме того как отследить тот момент, когда пользователь сказал остановиться?
У меня была мысль создавать дополнительный поток, который будет читать с клавиатуры команды (хотя не совсем понимаю как это будет работать), а основной поток отследит это и закроется. Но хотелось бы что-нибудь попроще и чтобы это точно работало. Как это можно сделать?

Автор: zim22 28.5.2009, 18:14
Цитата(s_r @  28.5.2009,  18:01 Найти цитируемый пост)
 Как это можно сделать?

под 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}". Получилось то, что нужно, но хотелось бы элегантней решение...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)