crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> signals - slots
eldar85
  опции профиля:
сообщение 26.9.2010, 0:07
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

к примеру есть функция запуска других функций, по крайней мере мне нужно сделать такую.
Этот пример само собой не работает как мне нужно, вот и хочу узнать возможно ли как то по другому это сделать подобным образом.

в конструкторе соединения
connect(this, SIGNAL(funk1_signal()), this, SLOT(funk1());
....

void MainWindow::start()
{
emit funk1_signal();
emit funk2_signal();
emit funk3_signal();
}

void MainWindow::funk1()
{
    //долгое действие
}

void MainWindow::funk2()
{
   //долгое действие
}

void MainWindow::funk3()
{
   //долгое действие
}


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

Сообщение отредактировал eldar85 - 26.9.2010, 0:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 26.9.2010, 0:48
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Посмотри на QFuture и QtConcurent::Run и примеры с ними в assistant
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 26.9.2010, 1:33
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(eldar85 @ 26.9.2010, 1:07) *
мне нужно чтобы сразу все три были запущенны и функция start() вообще закончила свою работу а работали те функции которые запустились. реально ли такое?

У меня ощущение, что тебе надо писать многопоточное приложение. Почитать про это можно здесь и у Бланшет об этом написано.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 26.9.2010, 10:21
Сообщение #4


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


да многопоточное приложение я и пишу, дело не в многопоточности, класс для потоков занят другим делом, хотел чтобы основной тоже несколько действий выполнял чтобы еще кучу классов не создавать, пришлось три класса QThread создавать, потому что каждый должен выполнять совершено разные задачи, а у QThread можно пользоваться как нормальной функцией только run(); )))) решил проблему, но не компактно)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 27.9.2010, 6:29
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2889
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(eldar85 @ 26.9.2010, 13:21) *
хотел чтобы основной тоже несколько действий выполнял чтобы еще кучу классов не создавать

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


Цитата(eldar85 @ 26.9.2010, 13:21) *
а у QThread можно пользоваться как нормальной функцией только run()

можно произвести класс и сделать кучу публичных функций :)

Сообщение отредактировал Алексей1153 - 27.9.2010, 6:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.11.2019, 5:22