crossplatform.ru

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


  Ответ в Глупый вопрос по QConcurentRun
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
silver47 Дата 28.4.2011, 9:04
 
Цитата(wiz29 @ 28.4.2011, 10:50) *
поставив sleep на несколько секунд.


как sleep ставиться не знаю сделал так:
qDebug() << "Started: " << QTime::currentTime().toString("mm:ss:zzz");
QTime timer;
timer.start();
for(; timer.elapsed() < 10000;){
    //
}


UI не тормозит.
В, общем все красиво, именно так как нужно, сделал сигнал, по завершению кеширования прячется прогрессбар и выполняются нужные мне методы.
wiz29 Дата 28.4.2011, 8:54
 
Цитата(Litkevich Yuriy @ 27.4.2011, 19:24) *
это работает?

а с какой радости, извините, это не должно работать?

Цитата(silver47 @ 27.4.2011, 19:28) *
Ну по крайней мере выполняется. Пока операция занимает порядка 100 миллисекунд....


Проверить можно элементарно, поставив sleep на несколько секунд.

http://doc.trolltech.com/latest/qtconcurrentrun.html читаем раздел Using Member Functions
silver47 Дата 27.4.2011, 18:28
 
Цитата(Litkevich Yuriy @ 27.4.2011, 20:24) *
это работает?

Ну по крайней мере выполняется. Пока операция занимает порядка 100 миллисекунд, поэтому сказать точно, выполняется ли это отдельно от потока я не знаю... по отладочным сообщениям вроде как другой поток. Но все равно в планах кеширование вынести в отдельный класс, унаследованный от QThread
Litkevich Yuriy Дата 27.4.2011, 18:24
 
Цитата(silver47 @ 26.4.2011, 13:35) *
Возможен ли вызов метода класса таким образом? Если нет, то что можно вызвать?
нет, нельзя. просто функцию.
Опиши её в cpp-файле и пометь её как static.

Цитата(wiz29 @ 26.4.2011, 14:25) *
QtConcurrent::run(this, &MainWindow::createCache);
это работает?
wiz29 Дата 26.4.2011, 11:25
 
void MainWindow::updateUI(){
    if(socket){
        if (socket->isOpen() && socket->isEncrypted() && mainDB.isOpen()){ // Соединение с сервером установлено            
            // отсюда нужно вызвать this->createCache();
                       QtConcurrent::run(this, &MainWindow::createCache);

        }
    }
}

void MainWindow::createCache(){
    // some work
}

silver47 Дата 26.4.2011, 11:10
  Да
wiz29 Дата 26.4.2011, 11:09
  писать наследника от потока, обычно приходится лишь в крайних случаях, когда нужно специальная функциональность с отдельной петлей обработки событий.

void MainWindow::createCache(){
// some work
}

это нужно вызвать?
silver47 Дата 26.4.2011, 11:08
 
void MainWindow::updateUI(){
    if(socket){
        if (socket->isOpen() && socket->isEncrypted() && mainDB.isOpen()){ // Соединение с сервером установлено            
            // отсюда нужно вызвать this->createCache();
        }
    }
}

void MainWindow::createCache(){
    // some work
}
wiz29 Дата 26.4.2011, 11:06
 
Цитата(silver47 @ 26.4.2011, 12:03) *
Нет. не могу вызвать это непосредственно из класса.
Спасибо. Пойду в поток заворачивать.

покажи кусок кода в котором нужно вызвать.
silver47 Дата 26.4.2011, 11:03
  Нет. не могу вызвать это непосредственно из класса.
Спасибо. Пойду в поток заворачивать.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 12:23