Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Остановка работы однопоточного приложения 
:(
    Опции темы
s_r
Дата 28.5.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.1.2007

Репутация: нет
Всего: нет



Я пишу некоторое консольное приложение на C++ (под Linux). Которое делает недюжие вычисления. И необходимо, чтобы программа от пользователя получала сообщение остановиться, останавливалась, выполняла некоторые финальные действия и закрывалась.
Вот собственно все кроме того как отследить тот момент, когда пользователь сказал остановиться?
У меня была мысль создавать дополнительный поток, который будет читать с клавиатуры команды (хотя не совсем понимаю как это будет работать), а основной поток отследит это и закроется. Но хотелось бы что-нибудь попроще и чтобы это точно работало. Как это можно сделать?
PM MAIL   Вверх
zim22
Дата 28.5.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



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

под Windows помогает комбинация клавиш CTRL+C
насколько я помню эту комибацию можно отлавливать и реагировать нужным образом.


--------------------
PM MAIL   Вверх
s_r
Дата 28.5.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.1.2007

Репутация: нет
Всего: нет



Ну я подозреваю, что под линукс тоже можно отлавливать, но кто бы сказал как...:(
PM MAIL   Вверх
sdukshis
Дата 28.5.2009, 18:18 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
s_r
Дата 28.5.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 11.1.2007

Репутация: нет
Всего: нет



К сожалению, в MPI когда прилоежние запускается через mpiexec, то Ctrl+C срабатывает для mpiexec, а не запускаемого приложения:(
--------------------
В общем, поборол так:
запускаю в одном терминале "mpiexec ...", поток на нужном узле выводит свой PID, а в другом терминале даю команду "kill -n 2 {PID}". Получилось то, что нужно, но хотелось бы элегантней решение...

Это сообщение отредактировал(а) s_r - 28.5.2009, 18:58
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.