![]() |
|
|
![]()
|
|
| sergey_85 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
Привет!
есть код, он должен выполняться сколько угодно раз по нажатию кнопки, можно ли заставить объекты QThread самоудаляться после выполнения потока?
Я пробровал использовать QRunnable, но он не дает возможность запуска нескольких потоков одновременно, т.е после первого раза все ок, а на 2 раз новый поток не создается!
Это сообщение отредактировал(а) sergey_85 - 20.10.2009, 18:58 -------------------- A good design always pays off. |
||||
|
|||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: -1 Всего: 0 |
sergey_85, Смотри сигнал void finished(), повесь на него delete
--------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| sergey_85 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
но слот
-------------------- A good design always pays off. |
|||
|
||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: -1 Всего: 0 |
Это не слот, это сигнал. Создай метод в основном классе, соедини сигнал с этим методом, сделай MyThread *th членом класса, и в слоте, используй delete th --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| sergey_85 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
да, точно сигнал.
Нет, так не пойдет, потоки запускаются по клику на кнопке, причем кликать по ней можно сколько угодно раз, т.е. последовательно можно запустить много потоков нажав на кнопку несколько раз. Собирать потоки в list и проверять их на finished(), например в таймере неохота... Это сообщение отредактировал(а) sergey_85 - 20.10.2009, 19:28 -------------------- A good design always pays off. |
|||
|
||||
| niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: -1 Всего: 0 |
Странная аргументация) Добавлено @ 19:54 А в таймере и не нужно. По сигналу удаляй тот что завершился. Это сообщение отредактировал(а) niXman - 20.10.2009, 19:54 --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
| sergey_85 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
вообще QRunnable дает встроенное автоудаление, НО у него непонятное поведение например я жму на кнопку, выполняется этот код,
тут же жму еще раз - ничего не происходит, надо ждать пока завершиться 1 поток, странно? -------------------- A good design always pays off. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Это сообщение отредактировал(а) SABROG - 20.10.2009, 20:36 |
|||
|
||||
| sergey_85 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
во!!! классная qt'шная фишка! я так и знал, что-то такое должно быть!
делаю так и деструктор потока вызывается после выполнения run() т.е. после завершения потока! Всё как мне и надо!
спасибо большое, SABROG на сегодня вопросов больше не имею Это сообщение отредактировал(а) sergey_85 - 20.10.2009, 20:48 -------------------- A good design always pays off. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Помести connect в конструктор MyThread, так оно более универсальней будет.
|
|||
|
||||
| sergey_85 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
ok
-------------------- A good design always pays off. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Ради интереса попробуй сделать через QRunnable. Только вместо tryStart() используй start() и вызови QThreadPool::setMaxThreadCount() побольше, т.к. для двухядерника количество потоков скорее всего будет 2, а для обычного 1.
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |