![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| s_r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.1.2007 Репутация: нет Всего: нет |
Я пишу некоторое консольное приложение на C++ (под Linux). Которое делает недюжие вычисления. И необходимо, чтобы программа от пользователя получала сообщение остановиться, останавливалась, выполняла некоторые финальные действия и закрывалась.
Вот собственно все кроме того как отследить тот момент, когда пользователь сказал остановиться? У меня была мысль создавать дополнительный поток, который будет читать с клавиатуры команды (хотя не совсем понимаю как это будет работать), а основной поток отследит это и закроется. Но хотелось бы что-нибудь попроще и чтобы это точно работало. Как это можно сделать? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
под Windows помогает комбинация клавиш CTRL+C насколько я помню эту комибацию можно отлавливать и реагировать нужным образом. |
|||
|
||||
| s_r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.1.2007 Репутация: нет Всего: нет |
Ну я подозреваю, что под линукс тоже можно отлавливать, но кто бы сказал как...:(
|
|||
|
||||
| sdukshis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 23.3.2009 Репутация: нет Всего: 1 |
Можно сделать через обработку сигнала.
В программе должна быть функция обработчик сигнала. После чего можно обрабатывать, например, сигнал порождаемый Ctrl-С (SIGINT) Если программа работает в фоновом режиме, то сигналы можно отправлять так: kill SIGINT pid Подробней можно посмотреть здесь: http://www.cs.cf.ac.uk/Dave/C/node24.html Это сообщение отредактировал(а) sdukshis - 28.5.2009, 18:19 |
|||
|
||||
| s_r |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.1.2007 Репутация: нет Всего: нет |
К сожалению, в MPI когда прилоежние запускается через mpiexec, то Ctrl+C срабатывает для mpiexec, а не запускаемого приложения:(
-------------------- В общем, поборол так: запускаю в одном терминале "mpiexec ...", поток на нужном узле выводит свой PID, а в другом терминале даю команду "kill -n 2 {PID}". Получилось то, что нужно, но хотелось бы элегантней решение... Это сообщение отредактировал(а) s_r - 28.5.2009, 18:58 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |