crossplatform.ru

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

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Потоконезависимые очереди, реализация
AD
  опции профиля:
сообщение 10.11.2011, 15:47
Сообщение #21


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


А вот так в поток не попадаю вторично:
/// Запуск потока вычисления
void CalcThread::run()
{
    if(!QueueRequests.isEmpty())
    {
                     wait(_sec * TO_MILLISEC);
        Request request(QueueRequests.takeRequest());
        int error_code;
        double result = doOperation(request.type_work, request.first_operand, request.second_operand, error_code);
    }

    exec();
}

Поток запускаю в главном потоке в конструкторе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 10.11.2011, 16:19
Сообщение #22


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

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

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




Репутация:   44  


Пытаешься написать методом научного тыка? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.11.2011, 16:26
Сообщение #23


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(BRE @ 10.11.2011, 17:19) *
Пытаешься написать методом научного тыка? :)

Да нет. Просто никак не могу понять, зачем этот exec(), если я не возвращаюсь в поток? Понятное дело, что после нескольких попыток в итоге сделаю по другому, но хотел разобраться, как заставить вернуться в функцию run правильно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 10.11.2011, 16:36
Сообщение #24


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

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

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




Репутация:   44  


exec никуда не возвращает, она просто запускает цикл обработки событий для данного потока. Выйти из этого цикла позволяет метод quit или exit класса QThread.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.11.2011, 16:40
Сообщение #25


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(BRE @ 10.11.2011, 17:36) *
exec никуда не возвращает, она просто запускает цикл обработки событий для данного потока. Выйти из этого цикла позволяет метод quit или exit класса QThread.

А... Начинает доходить. Т.е. по сути exec() запустить в теле run(). А затем с помощью сигналов и слотов выполнить нужные мне действия. Так ведь можно решить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 10.11.2011, 16:58
Сообщение #26


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

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

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




Репутация:   44  


Цитата(AD @ 10.11.2011, 17:40) *
Цитата(BRE @ 10.11.2011, 17:36) *
exec никуда не возвращает, она просто запускает цикл обработки событий для данного потока. Выйти из этого цикла позволяет метод quit или exit класса QThread.

А... Начинает доходить. Т.е. по сути exec() запустить в теле run(). А затем с помощью сигналов и слотов выполнить нужные мне действия. Так ведь можно решить?

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

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


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




RSS Текстовая версия Сейчас: 16.4.2024, 19:28