Russian Qt Forum
Ноябрь 23, 2024, 11:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: QThread  (Прочитано 23601 раз)
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #30 : Май 22, 2012, 22:53 »

в Дельфи если есть класс определенный пользователем - то тут уж все))) Никакого наследования
Непонимающий

Так как сделать в данном случае правильную логику? Я не прикалываюсь, мне правда интересно, как лучше сделать. Пока я просто дожидаюсь выполнения процедуры.
Предусматривать точки в функции, где её можно прервать, проверять, например, некоторый флаг и реализовывать выход (не забыв освободить память, разлочить мьютексы и т.п.).
Увы, только так. Обычной функции, незнающей о том, что она в потоке не выйдет.
Записан
mutineer
Гость
« Ответ #31 : Май 22, 2012, 22:54 »

Как можно разбить чужой скомпилированный метод на проверки окончания? Или как в него вставить этот самый "некий цикл"?

1. Чужой - никак. Речь шла о своем коде. Извините - я что то пропустил?
2. Ответ: никак.

Цитировать
Например у меня есть поток без цикла обработки событий, в нём запускается блокирующая длительная процедура, которая является "чёрным ящиком"

Эта фраза как бы намекает, что внутренности процедуры недоступны. Так что да, что-то пропустил
Записан
Alex_C
Гость
« Ответ #32 : Май 22, 2012, 22:55 »

или нет...

А если только один поток в одно время?
Записан
V1KT0P
Гость
« Ответ #33 : Май 22, 2012, 22:56 »

Как можно разбить чужой скомпилированный метод на проверки окончания? Или как в него вставить этот самый "некий цикл"?
1. Чужой - никак. Речь шла о своем коде. Извините - я что то пропустил?
2. Ответ: никак.
Я что-то пропустил и реверсинг уже отменили?
У меня вопрос в тему. Как лучше и правильнее.

Например у меня есть поток без цикла обработки событий, в нём запускается блокирующая длительная процедура, которая является "чёрным ящиком". В какой-то момент я хочу поток грохнуть, не дожидаясь, пока та процедура отработает. Наверное надо вызвать terminate? Но это вообще не рекомендуется, тогда вопрос, как быть?

Как по мне если нельзя нормально остановить чужой код, то лучше реверсить алгоритм или самому написать аналогичный функционал.

P.S. Тема уже чат начинает напоминать =).
Записан
Alex_C
Гость
« Ответ #34 : Май 22, 2012, 23:00 »

Я что-то пропустил и реверсинг уже отменили?

Обожаю такие ответы))) А ты реально на столько крут, чтоб сделать реверсинг любой проги?))) По моему свою проще написать)))
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #35 : Май 22, 2012, 23:03 »

или нет...

А если только один поток в одно время?

А что значит один поток в одно???

Объясните Улыбающийся
Записан
iroln
Гость
« Ответ #36 : Май 22, 2012, 23:08 »

Я что-то пропустил и реверсинг уже отменили?
Не, не отменили, но в данном случае я даже могу загрузить исходники "чёрного ящика" из СКВ, только мне это ничего не даст. Улыбающийся
Это просто пример из жизни. Хочется сделать программу более отзывчивой, чтобы интерфейс пользователя не блокировался долгими вычислениями. Пока там что-то считается, можно ещё что-то делать. Но программа использует всякие навороченные штуки, которые что-то считают. С одной стороны, пусть уж считают, можно и дождаться, а с другой стороны, приспичило пользователю программу закрыть, или изменить параметры расчётов. Оно ж вроде не блокируется, всё доступно, интерфейс живой. Так вот, закрывает пользователь программу, и не понятно, что делать с теми потоками, которые что-то усиленно считают в чёрных ящиках, они-то не знают, что пора бай-бай. А потом надо ещё все либы корректно выгрузить, ресурсы освободить и т.п.
« Последнее редактирование: Май 22, 2012, 23:22 от iroln » Записан
V1KT0P
Гость
« Ответ #37 : Май 22, 2012, 23:10 »

Я что-то пропустил и реверсинг уже отменили?
Обожаю такие ответы))) А ты реально на столько крут, чтоб сделать реверсинг любой проги?))) По моему свою проще написать)))
Тут все зависит от ситуации. Мне например дали задание написать аналог сервера, для интеграции с остальными программами компании. Но вот незадача, протокол то не документирован(владелец сервера не желает делиться) а железок накупили много, замена на аналоги будет стоить очень дорого. Вот и начал реверсить, осталось отреверсить алгоритм расшифровки =).
Записан
Alex_C
Гость
« Ответ #38 : Май 22, 2012, 23:12 »

А что значит один поток в одно???

.. время. В том коде, что приведен нет проверки - а поток запущен уже или нет. Нажимаем снова на кнопочку старт ..и ? запускаем еще один экземпляр потока или нет?
Записан
mutineer
Гость
« Ответ #39 : Май 22, 2012, 23:13 »

А что значит один поток в одноНепонимающий

.. время. В том коде, что приведен нет проверки - а поток запущен уже или нет. Нажимаем снова на кнопочку старт ..и ? запускаем еще один экземпляр потока или нет?

Если взять себе привычку читать доку, то станет ясно, что вызов start() для уже запущенного потока не сделает ничего
Записан
Alex_C
Гость
« Ответ #40 : Май 22, 2012, 23:15 »

протокол то не документирован

Я тебя умоляю)) по роду своей деятельности очень часто этим занимаюсь))) Это не реверсинг - это всего лишь анализ протоколов работы, что совсем не одно и тоже))
Записан
Alex_C
Гость
« Ответ #41 : Май 22, 2012, 23:17 »

Если взять себе привычку читать доку, то станет ясно, что вызов start() для уже запущенного потока не сделает ничего

А если взять в привычку читать то, что тут спрашивают, но выясниться, что именно хотят "запустить")))
Записан
DmitryM
Гость
« Ответ #42 : Май 22, 2012, 23:21 »

Есть альтернатива, запускать нужную процедуру в отдельном процессе!
Записан
Alex_C
Гость
« Ответ #43 : Май 22, 2012, 23:24 »

Есть альтернатива, запускать нужную процедуру в отдельном процессе!

ЭЭЭЭ... так вроде с самого начала об этом и вопрос))
Записан
iroln
Гость
« Ответ #44 : Май 22, 2012, 23:25 »

Есть альтернатива, запускать нужную процедуру в отдельном процессе!
Да, я об этом тоже уже думал. Но пока было лень думать над тем, как всё это спроектировать, межпроцессорное взаимодействие и т.п. Хотя, думаю, если всё по уму сделать, должно быть даже проще и гибче чем с потоками.
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.