powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt: Существует ли метод завершения текущего потока?
22 сообщений из 22, страница 1 из 1
Qt: Существует ли метод завершения текущего потока?
    #39548175
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создал задачи- объекты, унаследованные от QRunnable и скормил их QThreadPool.

Представим, что один из потоков не может дальше продолжать работать: например, не читается файл или память не выделяется... Как грохнуть только этот поток, оставив процесс и всё приложение в живых? Не хочется все методы потока делать функциями с возвращаемым значением, характеризующим наличие/отсутствие ошибок (и методы методов и методы методов методов....). Надо аналог terminate(), который грохнет только текущий поток.

Какие паттерны программирования применяют в подобных ситуациях?
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548239
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
return?
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548274
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonreturn?

Беда в том, что вложенность методов может быть достаточно глубокой, и надо этот return "поднимать" в стеке вызовов до метода run(). Поэтому чтобы не запутаться необходимо ВСЕ возвращаемые значения использовать в качестве сигнала наличия/отсутствия ошибки. Не хочется так извращать логику программы.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548280
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе надо грохнуть поток по твоему условию? Или разбираться в причинах почему он падает?
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548284
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL... Не хочется все методы потока делать функциями с возвращаемым значением, характеризующим наличие/отсутствие ошибок (и методы методов и методы методов методов....). ...

Какие паттерны программирования применяют в подобных ситуациях?
Удаляют паттерны "лень", "руки из жо.." и делают как надо.

Читаем "методы обработки ошибок в программах"
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548287
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя методы убивания потока и есть, так делать не надо.

Это вам не ЯС и не Эрланг.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548291
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonТебе надо грохнуть поток по твоему условию? Или разбираться в причинах почему он падает?

авторПредставим, что один из потоков не может дальше продолжать работать: например, не читается файл или память не выделяется...

Что я могу выяснить, если операционная система не предоставила ресурсы? Если поток не может дальше работать, то его нужно просто грохнуть, а его задачу поставить в конец очереди (может к тому времени ОС сможет предоставить ресурсы).
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548326
вЪю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlekseySQLmaytonТебе надо грохнуть поток по твоему условию? Или разбираться в причинах почему он падает?

авторПредставим, что один из потоков не может дальше продолжать работать: например, не читается файл или память не выделяется...

Что я могу выяснить, если операционная система не предоставила ресурсы? Если поток не может дальше работать, то его нужно просто грохнуть, а его задачу поставить в конец очереди (может к тому времени ОС сможет предоставить ресурсы).
Изувер вы барин. Убивать работника только за то что вы дали ему кривой инструмент....
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548481
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLmaytonreturn?

Беда в том, что вложенность методов может быть достаточно глубокой, и надо этот return "поднимать" в стеке вызовов до метода run(). Поэтому чтобы не запутаться необходимо ВСЕ возвращаемые значения использовать в качестве сигнала наличия/отсутствия ошибки. Не хочется так извращать логику программы.
Кинуть исключение, а наверху его поймать и return.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548517
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TКинуть исключение, а наверху его поймать и return.

К этому варианту пока склоняюсь, настораживает только разбухание кода от обработки всех возможных исключений.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548530
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLDima TКинуть исключение, а наверху его поймать и return.

К этому варианту пока склоняюсь, настораживает только разбухание кода от обработки всех возможных исключений.
Зачем их много плодить? Это только для самых-самых критичных случаев, т.е. когда "что-то пошло не так".

Я не любитель исключений, но если они есть в используемой библиотеке, то с ними надо как-то жить. Классический совет: ловить только те исключения что в состоянии обработать. На самом верху можно ловить все и делать запись в лог, чтобы прогу совсем не остановило необработанное исключение.

В общем не надо все ошибки переводить на исключения, только критические.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548566
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Спасибо!
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLmaytonТебе надо грохнуть поток по твоему условию? Или разбираться в причинах почему он падает?

авторПредставим, что один из потоков не может дальше продолжать работать: например, не читается файл или память не выделяется...

Что я могу выяснить, если операционная система не предоставила ресурсы? Если поток не может дальше работать, то его нужно просто грохнуть, а его задачу поставить в конец очереди (может к тому времени ОС сможет предоставить ресурсы).
Тут надо подумать архитектурно. Что за ошибка? Если ОС не может выделить память - то ситуация
аварийна ИМХО.

Если не память - то прошу прояснить сообществу что за ресурсы имелись в виду.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39548603
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне одному кажется, что ТС путает поток и какой-то QT-шный объект-обёртку?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39549361
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonТут надо подумать архитектурно. Что за ошибка? Если ОС не может выделить память - то ситуация
аварийна ИМХО.

Если не память - то прошу прояснить сообществу что за ресурсы имелись в виду.

Все системные вызовы. В топике приведены примеры с памятью и обращение к файловой системе.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39549435
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появился вопрос по исключениям:

Функция http://en.cppreference.com/w/cpp/io/basic_istream/getline порождает исключения:
автор Exceptions
failure if an error occurred (the error state flag is not goodbit) and exceptions() is set to throw for that state.

If an internal operation throws an exception, it is caught and badbit is set. If exceptions() is set for badbit, the exception is rethrown.

, поэтому если их не перехватить где-нибудь выше по стеку, то приложение будет закрыто. Но зачем тогда устанавливаются флаги failbit и badbit? Ведь тогда их анализировать бессмысленно: в случае ошибки приложение будет закрыто и до анализа флагов программа просто не дойдет...
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39549445
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

предлагаю почитать учебник по языку с++

по самым по основам
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39549476
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SiemarglAlekseySQL,

предлагаю почитать учебник по языку с++

по самым по основам

По этому вопросу читал Страуструпа. Там говорится, что неперехваченные исключения вызывают terminate() и выполнение программы останавливается.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39549746
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLSiemarglAlekseySQL,

предлагаю почитать учебник по языку с++

по самым по основам

По этому вопросу читал Страуструпа. Там говорится, что неперехваченные исключения вызывают terminate() и выполнение программы останавливается.
верно.

тогда просто нужно внимательнее вчитаться в ссылку по getline и работу исключений с стд::потоками
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39549763
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemarglверно.

тогда просто нужно внимательнее вчитаться в ссылку по getline и работу исключений с стд::потоками

В описании getline написано, что генерирует два исключения: failure и exceptions и при этом устанавливаются биты. Для перехвата исключения надо указать его тип, поэтому характер ошибки после перехвата и так ясен. Единственное что могу придумать для чего могут использоваться биты- при перехвате всех исключений с помощью конструкции catch(...).

Можно не писать загадками? Зачем перекидываться бестолковыми сообщениями?
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39549770
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

failure if an error occurred (the error state flag is not goodbit) and exceptions() is set to throw for that state. If an internal operation throws an exception, it is caugh t and badbit is set. If exceptions() is set for badbit, the exception is rethrown.
...
Рейтинг: 0 / 0
Qt: Существует ли метод завершения текущего потока?
    #39550000
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SiemarglAlekseySQL,

failure if an error occurred (the error state flag is not goodbit) and exceptions() is set to throw for that state. If an internal operation throws an exception, it is caugh t and badbit is set. If exceptions() is set for badbit, the exception is rethrown.

Насколько я понял загадки продолжаются. Желаю вам удачи.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt: Существует ли метод завершения текущего потока?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]