crossplatform.ru

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

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


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

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

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




Репутация:   6  


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

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


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


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

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

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




Репутация:   12  


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

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

это нужно вызвать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 26.4.2011, 11:10
Сообщение #13


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

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

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




Репутация:   6  


Да
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 26.4.2011, 11:25
Сообщение #14


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

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

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




Репутация:   12  


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

        }
    }
}

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

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.4.2011, 18:24
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(silver47 @ 26.4.2011, 13:35) *
Возможен ли вызов метода класса таким образом? Если нет, то что можно вызвать?
нет, нельзя. просто функцию.
Опиши её в cpp-файле и пометь её как static.

Цитата(wiz29 @ 26.4.2011, 14:25) *
QtConcurrent::run(this, &MainWindow::createCache);
это работает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 27.4.2011, 18:28
Сообщение #16


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

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

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




Репутация:   6  


Цитата(Litkevich Yuriy @ 27.4.2011, 20:24) *
это работает?

Ну по крайней мере выполняется. Пока операция занимает порядка 100 миллисекунд, поэтому сказать точно, выполняется ли это отдельно от потока я не знаю... по отладочным сообщениям вроде как другой поток. Но все равно в планах кеширование вынести в отдельный класс, унаследованный от QThread
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 28.4.2011, 8:54
Сообщение #17


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

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

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




Репутация:   12  


Цитата(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
  опции профиля:
сообщение 28.4.2011, 9:04
Сообщение #18


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

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

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




Репутация:   6  


Цитата(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 не тормозит.
В, общем все красиво, именно так как нужно, сделал сигнал, по завершению кеширования прячется прогрессбар и выполняются нужные мне методы.

Сообщение отредактировал silver47 - 28.4.2011, 9:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 11:38