Доброго времени суток. Попытался применить простой пример у себя в приложении:
Пример:
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();
}
QFuture<void> f1 = run(createCache);
Гм... а теперь:
error: no matching function for call to 'run(<unresolved overloaded function type>)'
Вызываю так:
QFuture<void> f1 = run(createCache);
f1.waitForFinished();
В примере не применяется 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();
}
что конкретно ты пытаешься сделать?
сам по себе метод класса без объекта класса вызвать нельзя.
если этот метод не статический
Есть некий класс, один из методов которого нужно выполнить, как бы, в отдельном потоке. Этот метод получает данные по медленному соединению, данных немного.
Советовали воспользоваться QConcurentRun, т.к. он проще потока. Мне кажется, что уже сложнее
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);
....................
Нет. не могу вызвать это непосредственно из класса.
Спасибо. Пойду в поток заворачивать.
void MainWindow::updateUI(){
if(socket){
if (socket->isOpen() && socket->isEncrypted() && mainDB.isOpen()){ // Соединение с сервером установлено
// отсюда нужно вызвать this->createCache();
}
}
}
void MainWindow::createCache(){
// some work
}
писать наследника от потока, обычно приходится лишь в крайних случаях, когда нужно специальная функциональность с отдельной петлей обработки событий.
void MainWindow::createCache(){
// some work
}
Да
void MainWindow::updateUI(){
if(socket){
if (socket->isOpen() && socket->isEncrypted() && mainDB.isOpen()){ // Соединение с сервером установлено
// отсюда нужно вызвать this->createCache();
QtConcurrent::run(this, &MainWindow::createCache);
}
}
}
void MainWindow::createCache(){
// some work
}
qDebug() << "Started: " << QTime::currentTime().toString("mm:ss:zzz");
QTime timer;
timer.start();
for(; timer.elapsed() < 10000;){
//
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)