crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Глупый вопрос по QConcurentRun, Делаю как в примере:
silver47
  опции профиля:
сообщение 26.4.2011, 8:39
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


Доброго времени суток. Попытался применить простой пример у себя в приложении:
Пример:
int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QFuture<void> f1 = run(hello, QString("Alice"));
    QFuture<void> f2 = run(hello, QString("Bob"));
    f1.waitForFinished();
    f2.waitForFinished();
}


Я делаю так:
void SomeClass::go(){
    QFuture<void> f1 = run(createCache());        
    f1.waitForFinished();
}


На выходе: error: invalid use of void expression
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 26.4.2011, 9:04
Сообщение #2


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

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

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




Репутация:   29  


Цитата(silver47 @ 26.4.2011, 9:39) *
QFuture<void> f1 = run(createCache());
Зачем ты createCache() вызываешь? Там функцию передать надо. Скобки круглые в общем убери
QFuture<void> f1 = run(createCache);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 26.4.2011, 9:21
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


Гм... а теперь:
error: no matching function for call to 'run(<unresolved overloaded function type>)'

Вызываю так:
QFuture<void> f1 = run(createCache);
f1.waitForFinished();


createCache - приватная функция класса. Ничего не делает... пустая.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 26.4.2011, 10:07
Сообщение #4


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

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

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




Репутация:   29  


Цитата(silver47 @ 26.4.2011, 10:21) *
createCache - приватная функция класса. Ничего не делает... пустая.

createCache - должна быть глобальной функцией или статической функцией класса.
Или используй bind для связи, если уж так с методом класса связать надо. Тут (в низу сообщения) есть пример
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 26.4.2011, 10:35
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


В примере не применяется bind(по ссылке я его тоже не нашел):
#include <QDebug>
#include <QThread>
#include <QString>
#include <qtconcurrentrun.h>
#include <QApplication>

using namespace QtConcurrent;
void hello(QString name)
{
    qDebug() << "Hello" << name << "from" << QThread::currentThread();
}

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QFuture<void> f1 = run(hello, QString("Alice"));
    QFuture<void> f2 = run(hello, QString("Bob"));
    f1.waitForFinished();
    f2.waitForFinished();
}


Поставим вопрос по-другому:
Возможен ли вызов метода класса таким образом? Если нет, то что можно вызвать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 26.4.2011, 10:39
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


что конкретно ты пытаешься сделать?

сам по себе метод класса без объекта класса вызвать нельзя.

если этот метод не статический
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 26.4.2011, 10:41
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


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

Советовали воспользоваться QConcurentRun, т.к. он проще потока. Мне кажется, что уже сложнее :)

Сообщение отредактировал silver47 - 26.4.2011, 10:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 26.4.2011, 10:50
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


class A
{
    public:

    void someFunc()
    {
        qDebug()<<"bla"<< a;
    }
    int a;
};
........................
  
    A a;
    a.a = 10;
    QtConcurrent::run(&a, &A::someFunc);
    A b;
    b.a = 20;
    QtConcurrent::run(&b, &A::someFunc);
....................


так подойдет?:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 26.4.2011, 11:03
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

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




Репутация:   6  


Нет. не могу вызвать это непосредственно из класса.
Спасибо. Пойду в поток заворачивать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 26.4.2011, 11:06
Сообщение #10


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


Цитата(silver47 @ 26.4.2011, 12:03) *
Нет. не могу вызвать это непосредственно из класса.
Спасибо. Пойду в поток заворачивать.

покажи кусок кода в котором нужно вызвать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 21.5.2019, 6:32