Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Май 22, 2012, 18:40



Название: QThread
Отправлено: demaker от Май 22, 2012, 18:40
 :)

Скажите. QThread::quit() удаляет объект потока ???

Спасибо.


Название: Re: QThread
Отправлено: Bepec от Май 22, 2012, 19:09
Насколько я помню, это останавливает поток. Объект потока при этом остаётся.


Название: Re: QThread
Отправлено: V1KT0P от Май 22, 2012, 19:12
Насколько я помню, это останавливает поток. Объект потока при этом остаётся.
Это останавливает цикл обработки событий.


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 19:24
:)

Скажите. QThread::quit() удаляет объект потока ???

Спасибо.
Если у вас в потоке не запускается цикл обработки событий, то эта функция вообще ничего не делает.


Название: Re: QThread
Отправлено: mutineer от Май 22, 2012, 19:26
:)

Скажите. QThread::quit() удаляет объект потока ???

Спасибо.

не удаляет


Название: Re: QThread
Отправлено: Даниил от Май 22, 2012, 19:35
Вы прочли монолог коллективного разума prog.org.ru! Простите, не удержался  ;D


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 19:53
Нет не удаляет. Правильно удалить поток так (но только в том случае, если в потоке запускается ф-ция exec() - запуск обработки событий):

Код:
    if(thread) 
    {
        thread->quit(); // указываем, что потоку нужно завершиться
        thread->wait(); // ждем завершения
        delete thread; // Удаляем
        thread = 0; // чтоб первый if сработал
    }


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 20:18
У меня вопрос в тему. Как лучше и правильнее.

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


Название: Re: QThread
Отправлено: twp от Май 22, 2012, 20:23
ну есть старый способ через флаг, который может быть установлен из другого потока и который проверяется в блокирующей процедуре. Если флаг установлен, то процедура прекращает вычисления и поток завершается корректно


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 20:33
ну есть старый способ через флаг, который может быть установлен из другого потока и который проверяется в блокирующей процедуре. Если флаг установлен, то процедура прекращает вычисления и поток завершается корректно
Это если я сам ту блокирующую процедуру пишу. Естественно я так и делаю. Но тут не так просто, я не могу флаг поставить в ту блокирующую процедуру, у меня нет доступа в её код. По сути эту процедуру я дёргаю откуда-то из DLL. Типа, создаю некий объект и вызываю его метод calculate, который неизвестно как работает, мне от него нужен только результат вычислений.


Название: Re: QThread
Отправлено: Igors от Май 22, 2012, 20:40
ну есть старый способ через флаг, который ...
А может есть какой-то новый/лучший способ? Если знаете - расскажите, потому что мне кроме флага ничего не известно  :)

Это если я сам ту блокирующую процедуру пишу. Естественно я так и делаю. Но тут не так просто, я не могу флаг поставить в ту блокирующую процедуру, у меня нет доступа в её код. По сути эту процедуру я дёргаю откуда-то из DLL. Типа, создаю некий объект и вызываю его метод calculate, который неизвестно как работает, мне от него нужен только результат вычислений.
Если управление ушло в эту ф-цию, то придется ждать когда вернется. Ф-ция должна иметь callback для таких целей, если его нет - то ничего не попишешь.


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 20:46
Если управление ушло в эту ф-цию, то придется ждать когда вернется. Ф-ция должна иметь callback для таких целей, если его нет - то ничего не попишешь.
Да, приходится ждать. Потому что, если поток жёстко прервать, я боюсь, что в той функции может что-то произойти, что потащит за собой падение процесса, порчу данных, или что похуже.


Название: Re: QThread
Отправлено: Bepec от Май 22, 2012, 20:52
Самый мой весёлый опыт - одновременный terminate 14 потоков, работающих с сторонней dll.

Результат - мышка отказала. Клавиатура реагировала где то на 4-5 нажатие, система после 5 минут раздумий выпала в бсод. 
Но это произошло после недели безостановочного пользования сей программой ;) т.е. 1 раз в неделю - помоему норм результат :D


Название: Re: QThread
Отправлено: V1KT0P от Май 22, 2012, 21:05
Самый мой весёлый опыт - одновременный terminate 14 потоков, работающих с сторонней dll.

Результат - мышка отказала. Клавиатура реагировала где то на 4-5 нажатие, система после 5 минут раздумий выпала в бсод. 
Но это произошло после недели безостановочного пользования сей программой ;) т.е. 1 раз в неделю - помоему норм результат :D
Программа была запущена с админскими правами?


Название: Re: QThread
Отправлено: demaker от Май 22, 2012, 21:16
Понятно, как правильно удалять :)

Тогда такой вопрос :)
Допустим у меня есть оновной поток по нажатию клавиши  создается форма threadForm в  ней поток thread который изменяет счетчик по  timeout таймера. Если я нажимаю кнопку то таймер останавливается

thread->quit();
thread->wait();

а если делаю двойной клик мыши то запускается.

Не могу понять поток надо удалять или просто снова запускать в обработчики событий ???


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 21:18
demaker
Поток можно запускать/завершать какое угодно количество раз, при этом объект потока пересоздавать не надо.


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 21:43
demaker
Поток можно запускать/завершать какое угодно количество раз, при этом объект потока пересоздавать не надо.

Очень интересный вопрос на самом деле. Дело в том, что в винде, завершившись поток уничтожает себя. Что Вы имеете под понятием "не пересоздавать заново"? Может в Линуксе как то не так?)))

На самом деле так: поток существует до тех пор, пока он работает. После прекращения работы - он уничтожается.
Теперь конкретно к Вамему вопросу - поток у Вас должен быть один?


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 21:48
Например у меня есть поток без цикла обработки событий, в нём запускается блокирующая длительная процедура, которая является "чёрным ящиком". В какой-то момент я хочу поток грохнуть, не дожидаясь, пока та процедура отработает. Наверное надо вызвать terminate? Но это вообще не рекомендуется, тогда вопрос, как быть?

Вы сами ответили на своей вопрос - логика Вашей программы - однозначно не правильна.


Название: Re: QThread
Отправлено: mutineer от Май 22, 2012, 21:54
Очень интересный вопрос на самом деле. Дело в том, что в винде, завершившись поток уничтожает себя. Что Вы имеете под понятием "не пересоздавать заново"? Может в Линуксе как то не так?)))

В разговоре, скорее всего, имеется в виду экземпляр класса QThread, который создавался для управления потоком, а не сущность ядра


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 21:57
Вы сами ответили на своей вопрос - логика Вашей программы - однозначно не правильна.
Хорошо, соглашусь. Как правильно? :)

По поводу "Что Вы имеете под понятием "не пересоздавать заново"?" - имею ввиду экземпляр класса QThread, тут уже ответили за меня. Я неправильно выразился на счёт "объекта потока". :)


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 22:02
В разговоре, скорее всего, имеется в виду экземпляр класса QThread, который создавался для управления потоком, а не сущность ядра

+100500)) Очень хорошее замечание! По этому, как мне кажется (я буду очень рад, если кто скажет, что не так) - уничтожение потока нужно производить, как я написал.

Отдельно по Вашему сообщению - очень интересно... Ну не уничтожаем мы экземпляр класса QThread... Честно говоря пока этот вопрос не прорабатывал. И? Где он висит?


Название: Re: QThread
Отправлено: mutineer от Май 22, 2012, 22:05
Отдельно по Вашему сообщению - очень интересно... Ну не уничтожаем мы экземпляр класса QThread... Честно говоря пока этот вопрос не прорабатывал. И? Где он висит?

Где создан, там и висит (в стеке или в хипе). Это ж обычный класс, по сути. Так что удалять его объекты надо как и все другие кутишные объекты.

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


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 22:13
Где создан, там и висит (в стеке или в хипе).

Да это понятно. Другое дело - практическое применение - пока не понятно. Если в стеке -уничтожится. Тут вопросов нет. Хорошо. Создали в "куче". Просто вопрос для меня не праздный. В отличии от Дельфи можно просто start() сказать?

... пока писал - ответ получил - спасибо! не знал, что вот так можно снова start() вызвать! Спасибо!


Название: Re: QThread
Отправлено: mutineer от Май 22, 2012, 22:17
Да это понятно. Другое дело - практическое применение - пока не понятно.

Отнаследовались, переопределили метод run(), написали туда своего кода. Выполнили раз. После завершения надо выполнить тот же код еще раз. Чтобы не удалять старый объект и не создавать новый можно просто запустить еще раз старый.

Если в стеке -уничтожится. Тут вопросов нет. Хорошо. Создали в "куче". Просто вопрос для меня не праздный. В отличии от Дельфи можно просто start() сказать?

не понял вопроса


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 22:31
Спасибо! Очень интересная информация. В пояснении моего вопроса - в Дельфи если есть класс определенный пользователем - то тут уж все))) Никакого наследования  - все не привыкну к правильному Qt))


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 22:37
... пока писал - ответ получил - спасибо! не знал, что вот так можно снова start() вызвать! Спасибо!
Ну так и я о том же говорил.

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



Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 22:45
Так как сделать в данном случае правильную логику? Я не прикалываюсь, мне правда интересно, как лучше сделать. Пока я просто дожидаюсь выполнения процедуры.

На мой взгляд только так - если Вы не вкладываете в код отдельного треда завершения по "указанию" - правильно только одно - ждать пока он завершиться. Хотите иначе - вложите в код некий цикл, аля тот что вкладывает в него метод exec() (хотя это по определению не верно... хотя могут быть основания). Давайте определимся - что значит "долгая" операция? Ее ведь как то можно .... разбить на проверки окончания? Или нет?


Название: Re: QThread
Отправлено: mutineer от Май 22, 2012, 22:48
На мой взгляд только так - если Вы не вкладываете в код отдельного треда завершения по "указанию" - правильно только одно - ждать пока он завершиться. Хотите иначе - вложите в код некий цикл, аля тот что вкладывает в него метод exec() (хотя это по определению не верно... хотя могут быть основания). Давайте определимся - что значит "долгая" операция? Ее ведь как то можно .... разбить на проверки окончания? Или нет?

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


Название: Re: QThread
Отправлено: demaker от Май 22, 2012, 22:51
demaker
Поток можно запускать/завершать какое угодно количество раз, при этом объект потока пересоздавать не надо.

 ??? Да по логике понятно что это так.

т.е. програмно это выглядит примерно так?

void threadForm:: keyPressEvent ( QKeyEvent * event)
{
...
if(event->key == Qt::Key_1)
   {
    thread->quit();
    thread->wait();
    event->accept();
  }
}

void threadForm::mouseDoubleClickEvent ( QMouseEvent * event )
{
  ...
  thread->start;
  event->accept;
}

или нет...


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 22:51
Как можно разбить чужой скомпилированный метод на проверки окончания? Или как в него вставить этот самый "некий цикл"?

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


Название: Re: QThread
Отправлено: LisandreL от Май 22, 2012, 22:53
в Дельфи если есть класс определенный пользователем - то тут уж все))) Никакого наследования
???

Так как сделать в данном случае правильную логику? Я не прикалываюсь, мне правда интересно, как лучше сделать. Пока я просто дожидаюсь выполнения процедуры.
Предусматривать точки в функции, где её можно прервать, проверять, например, некоторый флаг и реализовывать выход (не забыв освободить память, разлочить мьютексы и т.п.).
Увы, только так. Обычной функции, незнающей о том, что она в потоке не выйдет.


Название: Re: QThread
Отправлено: mutineer от Май 22, 2012, 22:54
Как можно разбить чужой скомпилированный метод на проверки окончания? Или как в него вставить этот самый "некий цикл"?

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

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

Эта фраза как бы намекает, что внутренности процедуры недоступны. Так что да, что-то пропустил


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 22:55
или нет...

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


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

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

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

P.S. Тема уже чат начинает напоминать =).


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:00
Я что-то пропустил и реверсинг уже отменили?

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


Название: Re: QThread
Отправлено: demaker от Май 22, 2012, 23:03
или нет...

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

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

Объясните :)


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


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


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:12
А что значит один поток в одно???

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


Название: Re: QThread
Отправлено: mutineer от Май 22, 2012, 23:13
А что значит один поток в одно???

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

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


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:15
протокол то не документирован

Я тебя умоляю)) по роду своей деятельности очень часто этим занимаюсь))) Это не реверсинг - это всего лишь анализ протоколов работы, что совсем не одно и тоже))


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:17
Если взять себе привычку читать доку, то станет ясно, что вызов start() для уже запущенного потока не сделает ничего

А если взять в привычку читать то, что тут спрашивают, но выясниться, что именно хотят "запустить")))


Название: Re: QThread
Отправлено: DmitryM от Май 22, 2012, 23:21
Есть альтернатива, запускать нужную процедуру в отдельном процессе!


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:24
Есть альтернатива, запускать нужную процедуру в отдельном процессе!

ЭЭЭЭ... так вроде с самого начала об этом и вопрос))


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 23:25
Есть альтернатива, запускать нужную процедуру в отдельном процессе!
Да, я об этом тоже уже думал. Но пока было лень думать над тем, как всё это спроектировать, межпроцессорное взаимодействие и т.п. Хотя, думаю, если всё по уму сделать, должно быть даже проще и гибче чем с потоками.


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 23:26
Есть альтернатива, запускать нужную процедуру в отдельном процессе!

ЭЭЭЭ... так вроде с самого начала об этом и вопрос))
Не, с самого начала обсуждались потоки, а не отдельные процессы под задачу.


Название: Re: QThread
Отправлено: V1KT0P от Май 22, 2012, 23:27
протокол то не документирован
Я тебя умоляю)) по роду своей деятельности очень часто этим занимаюсь))) Это не реверсинг - это всего лишь анализ протоколов работы, что совсем не одно и тоже))
То-есть восстановление алгоритма дешифровки это не реверсинг? Да и сервер сперва пришлось отвязать от USB ключа.
Каждый раз от железки приходят важные 16 байт информации, оттуда мне надо достать 8 байт. Но проблема в том, что каждый раз абсолютно разные байты, хотя там 12 байт точно одни и те-же. Закономерности никакой и как ты проанализируешь и узнаешь как оттуда достать эти 8 байт? Могу скинуть хоть 100 штук, врят-ли ты найдешь алгоритм. А вот дизассемблер любезно предоставил код на асме(там жуть, компилятор развернул циклы и получилась громадная такая простыня =)).


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:36
Да, я об этом тоже уже думал. Но пока было лень думать над тем, как всё это спроектировать, межпроцессорное взаимодействие и т.п. Хотя, думаю, если всё по уму сделать, должно быть даже проще и гибче чем с потоками.

Даже забудь об этом думать. Межпроцессорное взаимодействие (даже не беря во внимание кросс-платформенность) - ... очень ограничена. В своей проге пытался это сделать - на основе ActivX - даже такая гибкая структура породила кучу проблем . Бросил это не благодарное занятие))


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:40
То-есть восстановление алгоритма дешифровки это не реверсинг?

Я не спорю - что ты - умный))) Но все же по моему реверсинг - это то, что я делал в 90-е во времена DOS - реально восстанавливая , как прога работает. Зачем - не спрашивай)))


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 23:40
Даже забудь об этом думать. Межпроцессорное взаимодействие (даже не беря во внимание кросс-платформенность) - ... очень ограничена. В своей проге пытался это сделать - на основе ActivX - даже такая гибкая структура породила кучу проблем . Бросил это не благодарное занятие))
Ну вот, Google Chrome, например, работает же. Причём неплохо работает, надо заметить. Смогли же. :)


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:46
Ну вот, Google Chrome, например, работает же. Причём неплохо работает, надо заметить. Смогли же. :)

Э... даже не знаю что ответить. Вы хотите написать новый интернет-навигатор? Это одно. Или же свою программу со множеством exe-файлов , взаимодействующих между собой?


Название: Re: QThread
Отправлено: V1KT0P от Май 22, 2012, 23:52
Но все же по моему реверсинг - это то, что я делал в 90-е во времена DOS - реально восстанавливая , как прога работает.
Как по мне так реверсинг это не только полное восстановление программы, но и часть программы, отдельные алгоритмы, архитектура и идеи.
Зачем - не спрашивай)))
Небось интересно было =). Я помню свой первый комп, мне было интересно как оно работает и что внутри. Лазил везде, вплоть до уничтожения ОС =).


Название: Re: QThread
Отправлено: iroln от Май 22, 2012, 23:56
Э... даже не знаю что ответить. Вы хотите написать новый интернет-навигатор? Это одно. Или же свою программу со множеством exe-файлов , взаимодействующих между собой?
Chrome же не имеет "множества exe-файлов". Файл один, а процессов много. Каждая вкладка в своём процессе. :)
Я пишу софт для инженерно-исследовательской работы, но это не имеет особого значения, просто хочется написать хорошую программу. :)


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:56
Небось интересно было =). Я помню свой первый комп, мне было интересно как оно работает и что внутри. Лазил везде, вплоть до уничтожения ОС =).

Институт. Студент. Изучал (? - так вроде культурно) программы по своей инициативе - да и денег тогда б за это не дали. Согласен с тобой - интересно было!


Название: Re: QThread
Отправлено: Alex_C от Май 22, 2012, 23:58
Chrome же не имеет "множества exe-файлов".

Должен тогда понимать - какое будет взаимодействие? Если уровень гугл-хрома - почему бы нет? Если сложнее - думать надо.


Название: Re: QThread
Отправлено: iroln от Май 23, 2012, 00:01
Должен тогда понимать - какое будет взаимодействие? Если уровень гугл-хрома - почему бы нет? Если сложнее - думать надо.
Примерно представляю себе, но серьёзно не думал и пока ничего не проектировал. Это пока в мыслях, там других проблем помимо этого хватает. :)


Название: Re: QThread
Отправлено: DmitryM от Май 23, 2012, 06:32
Да, я об этом тоже уже думал. Но пока было лень думать над тем, как всё это спроектировать, межпроцессорное взаимодействие и т.п. Хотя, думаю, если всё по уму сделать, должно быть даже проще и гибче чем с потоками.

Даже забудь об этом думать. Межпроцессорное взаимодействие (даже не беря во внимание кросс-платформенность) - ... очень ограничена. В своей проге пытался это сделать - на основе ActivX - даже такая гибкая структура породила кучу проблем . Бросил это не благодарное занятие))
Кто же делает на основе ActivX, когда есть замечательный QProcess http://qt-project.org/doc/qt-4.8/qprocess.html (http://qt-project.org/doc/qt-4.8/qprocess.html)
Нужно всего лишь запихать вызов этой dll в main, который из stdio берет входные данные, а результат выводит в stdout.
При этом всегда можешь убить этот процесс, а если из-за ошибки внутри dll умирает процесс, то всегда это можно будет обработать.


Название: Re: QThread
Отправлено: demaker от Май 23, 2012, 22:43
А что значит один поток в одно???

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

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


 ??? так как надо делать правильно ???
Скажите  :)


Название: Re: QThread
Отправлено: alexis031182 от Май 23, 2012, 23:01
Код:
void threadForm::keyPressEvent ( QKeyEvent * event)
{
...
if(event->key == Qt::Key_1)
   {
    thread->quit();
    thread->wait();
    event->accept();
  }
}

void threadForm::mouseDoubleClickEvent ( QMouseEvent * event )
{
  ...
  if(thread->isRunning()) {
    thread->quit();
    thread->wait();
  }

  thread->start;
  event->accept;
}


Название: Re: QThread
Отправлено: demaker от Май 26, 2012, 22:46
 ;)Спасибо