![]() |
|
![]() ![]() ![]() |
|
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Здравствуйте.
Есть простенькое консольное приложение на Qt.
Подскажите, как правильно выйти из такого приложения ? Если в Windows нажать Ctrl+C или Ctrl+Break, то программа закрывается, но деструктор ~Some() не вызывается. Как вообще в таком приложении отслеживать нажатия клавиш ? Допустим, я хочу, чтобы программа нормально завершалась по Esc Желательно кроссплатформенное решение. Если же решение только системозависимое, то подскажите, пожалуйста, как это сделать в Windows и в Linux. Спасибо. Это сообщение отредактировал(а) borisbn - 2.4.2012, 10:10 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
кроссплатформенного решения нет. для LINUX ты должен через termios настроить получение данных терминала без ожидания сброса буферов, а под windows нужно использовать их API Console*.
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
bsa, спасибо.
С Ctrl+C справился. POSIX-сигналы, оказывается, в венде прекрасно работают
В Linux не проверял, но, думаю, там всё будет работать. Сейчас поищу как обрабатывать клавиши -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
borisbn, вообще-то, делать так, как ты сделал не рекомендуется. Обработчики сигналов должны выполнять минимум операций и, желательно, над атомарными типами без блокировок. В противном случае, программа может повиснуть.
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
bsa, думаешь, в qApp->quit(); могут быть блокировки ?
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
borisbn, х.з. все классы qt потокобезопасные. поэтому есть вероятность наличия мьютекса...
Используй sig_atomic_t в качестве флага. А из программы его периодически проверяй. |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
bsa, спасибо. На будущее учту. Именно в этой программе оставлю так (пока), т.к. в ней нет никаких потоков, а для того, чтобы периодически что-то проверять нужен будет таймер... лениво заводить
![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |