Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ signals - slots

Автор: eldar85 26.9.2010, 0:07

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

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

в конструкторе соединения
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() вообще закончила свою работу а работали те функции которые запустились. реально ли такое?

Автор: igor_bogomolov 26.9.2010, 0:48

Посмотри на QFuture и QtConcurent::Run и примеры с ними в assistant

Автор: Sokoloff 26.9.2010, 1:33

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

У меня ощущение, что тебе надо писать многопоточное приложение. Почитать про это можно http://doc.crossplatform.ru/qt/4.6.x/threads.html и у Бланшет об этом написано.

Автор: eldar85 26.9.2010, 10:21

да многопоточное приложение я и пишу, дело не в многопоточности, класс для потоков занят другим делом, хотел чтобы основной тоже несколько действий выполнял чтобы еще кучу классов не создавать, пришлось три класса QThread создавать, потому что каждый должен выполнять совершено разные задачи, а у QThread можно пользоваться как нормальной функцией только run(); )))) решил проблему, но не компактно)

Автор: Алексей1153 27.9.2010, 6:29

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

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


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

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

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)