Russian Qt Forum
Ноябрь 23, 2024, 11:31
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
QThread
Страниц:
1
2
[
3
]
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QThread (Прочитано 23603 раз)
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: QThread
«
Ответ #30 :
Май 22, 2012, 22:53 »
Цитата: Alex_C от Май 22, 2012, 22:31
в Дельфи если есть класс определенный пользователем - то тут уж все))) Никакого наследования
Цитата: iroln от Май 22, 2012, 22:37
Так как сделать в данном случае правильную логику? Я не прикалываюсь, мне правда интересно, как лучше сделать. Пока я просто дожидаюсь выполнения процедуры.
Предусматривать точки в функции, где её можно прервать, проверять, например, некоторый флаг и реализовывать выход (не забыв освободить память, разлочить мьютексы и т.п.).
Увы, только так. Обычной функции, незнающей о том, что она в потоке не выйдет.
Записан
mutineer
Гость
Re: QThread
«
Ответ #31 :
Май 22, 2012, 22:54 »
Цитата: Alex_C от Май 22, 2012, 22:51
Цитата: mutineer от Май 22, 2012, 22:48
Как можно разбить чужой скомпилированный метод на проверки окончания? Или как в него вставить этот самый "некий цикл"?
1. Чужой - никак. Речь шла о своем коде. Извините - я что то пропустил?
2. Ответ: никак.
Цитировать
Например у меня есть поток без цикла обработки событий, в нём запускается блокирующая длительная процедура, которая является "чёрным ящиком"
Эта фраза как бы намекает, что внутренности процедуры недоступны. Так что да, что-то пропустил
Записан
Alex_C
Гость
Re: QThread
«
Ответ #32 :
Май 22, 2012, 22:55 »
Цитата: demaker от Май 22, 2012, 22:51
или нет...
А если только один поток в одно время?
Записан
V1KT0P
Гость
Re: QThread
«
Ответ #33 :
Май 22, 2012, 22:56 »
Цитата: Alex_C от Май 22, 2012, 22:51
Цитата: mutineer от Май 22, 2012, 22:48
Как можно разбить чужой скомпилированный метод на проверки окончания? Или как в него вставить этот самый "некий цикл"?
1. Чужой - никак. Речь шла о своем коде. Извините - я что то пропустил?
2. Ответ: никак.
Я что-то пропустил и реверсинг уже отменили?
Цитата: iroln от Май 22, 2012, 20:18
У меня вопрос в тему. Как лучше и правильнее.
Например у меня есть поток без цикла обработки событий, в нём запускается блокирующая длительная процедура, которая является "чёрным ящиком". В какой-то момент я хочу поток грохнуть, не дожидаясь, пока та процедура отработает. Наверное надо вызвать terminate? Но это вообще не рекомендуется, тогда вопрос, как быть?
Как по мне если нельзя нормально остановить чужой код, то лучше реверсить алгоритм или самому написать аналогичный функционал.
P.S. Тема уже чат начинает напоминать =).
Записан
Alex_C
Гость
Re: QThread
«
Ответ #34 :
Май 22, 2012, 23:00 »
Цитата: V1KT0P от Май 22, 2012, 22:56
Я что-то пропустил и реверсинг уже отменили?
Обожаю такие ответы))) А ты реально на столько крут, чтоб сделать реверсинг любой проги?))) По моему свою проще написать)))
Записан
demaker
Птица говорун
Offline
Сообщений: 962
Re: QThread
«
Ответ #35 :
Май 22, 2012, 23:03 »
Цитата: Alex_C от Май 22, 2012, 22:55
Цитата: demaker от Май 22, 2012, 22:51
или нет...
А если только один поток в одно время?
А что значит один поток в одно???
Объясните
Записан
iroln
Гость
Re: QThread
«
Ответ #36 :
Май 22, 2012, 23:08 »
Цитата: V1KT0P от Май 22, 2012, 22:56
Я что-то пропустил и реверсинг уже отменили?
Не, не отменили, но в данном случае я даже могу загрузить исходники "чёрного ящика" из СКВ, только мне это ничего не даст.
Это просто пример из жизни. Хочется сделать программу более отзывчивой, чтобы интерфейс пользователя не блокировался долгими вычислениями. Пока там что-то считается, можно ещё что-то делать. Но программа использует всякие навороченные штуки, которые что-то считают. С одной стороны, пусть уж считают, можно и дождаться, а с другой стороны, приспичило пользователю программу закрыть, или изменить параметры расчётов. Оно ж вроде не блокируется, всё доступно, интерфейс живой. Так вот, закрывает пользователь программу, и не понятно, что делать с теми потоками, которые что-то усиленно считают в чёрных ящиках, они-то не знают, что пора бай-бай. А потом надо ещё все либы корректно выгрузить, ресурсы освободить и т.п.
«
Последнее редактирование: Май 22, 2012, 23:22 от iroln
»
Записан
V1KT0P
Гость
Re: QThread
«
Ответ #37 :
Май 22, 2012, 23:10 »
Цитата: Alex_C от Май 22, 2012, 23:00
Цитата: V1KT0P от Май 22, 2012, 22:56
Я что-то пропустил и реверсинг уже отменили?
Обожаю такие ответы))) А ты реально на столько крут, чтоб сделать реверсинг любой проги?))) По моему свою проще написать)))
Тут все зависит от ситуации. Мне например дали задание написать аналог сервера, для интеграции с остальными программами компании. Но вот незадача, протокол то не документирован(владелец сервера не желает делиться) а железок накупили много, замена на аналоги будет стоить очень дорого. Вот и начал реверсить, осталось отреверсить алгоритм расшифровки =).
Записан
Alex_C
Гость
Re: QThread
«
Ответ #38 :
Май 22, 2012, 23:12 »
Цитата: demaker от Май 22, 2012, 23:03
А что значит один поток в одно???
.. время. В том коде, что приведен нет проверки - а поток запущен уже или нет. Нажимаем снова на кнопочку старт ..и ? запускаем еще один экземпляр потока или нет?
Записан
mutineer
Гость
Re: QThread
«
Ответ #39 :
Май 22, 2012, 23:13 »
Цитата: Alex_C от Май 22, 2012, 23:12
Цитата: demaker от Май 22, 2012, 23:03
А что значит один поток в одно
.. время. В том коде, что приведен нет проверки - а поток запущен уже или нет. Нажимаем снова на кнопочку старт ..и ? запускаем еще один экземпляр потока или нет?
Если взять себе привычку читать доку, то станет ясно, что вызов start() для уже запущенного потока не сделает ничего
Записан
Alex_C
Гость
Re: QThread
«
Ответ #40 :
Май 22, 2012, 23:15 »
Цитата: V1KT0P от Май 22, 2012, 23:10
протокол то не документирован
Я тебя умоляю)) по роду своей деятельности очень часто этим занимаюсь))) Это не реверсинг - это всего лишь анализ протоколов работы, что совсем не одно и тоже))
Записан
Alex_C
Гость
Re: QThread
«
Ответ #41 :
Май 22, 2012, 23:17 »
Цитата: mutineer от Май 22, 2012, 23:13
Если взять себе привычку читать доку, то станет ясно, что вызов start() для уже запущенного потока не сделает ничего
А если взять в привычку читать то, что тут спрашивают, но выясниться, что именно хотят "запустить")))
Записан
DmitryM
Гость
Re: QThread
«
Ответ #42 :
Май 22, 2012, 23:21 »
Есть альтернатива, запускать нужную процедуру в отдельном
процессе
!
Записан
Alex_C
Гость
Re: QThread
«
Ответ #43 :
Май 22, 2012, 23:24 »
Цитата: DmitryM от Май 22, 2012, 23:21
Есть альтернатива, запускать нужную процедуру в отдельном
процессе
!
ЭЭЭЭ... так вроде с самого начала об этом и вопрос))
Записан
iroln
Гость
Re: QThread
«
Ответ #44 :
Май 22, 2012, 23:25 »
Цитата: DmitryM от Май 22, 2012, 23:21
Есть альтернатива, запускать нужную процедуру в отдельном
процессе
!
Да, я об этом тоже уже думал. Но пока было лень думать над тем, как всё это спроектировать, межпроцессорное взаимодействие и т.п. Хотя, думаю, если всё по уму сделать, должно быть даже проще и гибче чем с потоками.
Записан
Страниц:
1
2
[
3
]
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...