Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корректное закрытие потока 
:(
    Опции темы
kuvshinka
Дата 6.11.2014, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подскажите пож-та как правильно завершить работу потока:
пробую так
Код

 othread->terminate();
 othread->wait();
 delete othread;

выдается предупреждение
Код

Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt. You must
reimplement QApplication::notify() and catch all exceptions there

Так как же правильно (без ошибок и предупреждений) закрывать поток?
PM MAIL   Вверх
Vasya
Дата 6.11.2014, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вообще таким образом удалять объекты QThread в Qt опасно, можно получить segmentation fault или что-то в вашем случае. Рекомендуется QObject::deleteLater(). А зачем в функции создавать отдельный поток, если надо поодождать его завершения, чтоб удалить? Наверно правильно было бы удалить его из самого себя, после того как он завершит свои дела, если конечно, не нужно его завершить экстренно.

Это сообщение отредактировал(а) Vasya - 6.11.2014, 22:15
PM MAIL   Вверх
Vasya
Дата 7.11.2014, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно еще просто 
Код

connect(othread, SIGNAL(finished()), SLOT(deleteLater()));

PM MAIL   Вверх
borisbn
Дата 7.11.2014, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(Vasya @ 7.11.2014,  06:20)
Можно еще просто 
Код

connect(othread, SIGNAL(finished()), SLOT(deleteLater()));

Цитата
connect(othread, SIGNAL(finished()), othread, SLOT(deleteLater()));

иначе м.б. больно ))


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
kuvshinka
Дата 14.11.2014, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я пробовала в программе 1
Код

othread->deleteLater();

Предыстория: программа_1 обменивается по сети данными с программой_1...в программе_2 есть возможность перезапуска программы_1: при этом она должна корректно закрыться, удалив у себя все указатели и закрыв все свои потоки, заново запуститься и установить соединение с программой_2...Так вот при таком удалении указателя на объект потока (deleteLater) при автоперезапуске программы_1 не устанавливается связь с программой_2 (т.е. поток вроде стартует, но данных как бы нет, при удалении через delete связь после автоперезагрузки восстанавливается, но возникает вышеуказанное предупреждение)

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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