crossplatform.ru

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

> Потоконезависимые очереди, реализация
AD
  опции профиля:
сообщение 7.11.2011, 10:28
Сообщение #1


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

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

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




Репутация:   17  


Есть ли в библиотеках Qt, boost реализация потоконезависимых очередей? Можно ли применить QList? Если нет, есть ли в инете подобное? Поискал сам, пока ничего путного не видел. Может быть кто-то уже видел что-то подобное?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
BRE
  опции профиля:
сообщение 9.11.2011, 19:05
Сообщение #2


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

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

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




Репутация:   44  


Чаще всего встречал перевод "условные переменные".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.11.2011, 10:19
Сообщение #3


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

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

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




Репутация:   17  


Ага. Ну тут еще вопросы.
Смысл программы следующий: в главном потоке мы заполняем очередь запросов, в дополнительном - происходят вычисления и результаты попадают в очередь результатов. Исходя из приведенного на прог.орг примера сделал функции проверки на пустоту и размер следующими:
/// Пpoвepka на пустую очередь
bool ReqQueue::isEmpty()
{
    QMutexLocker locker(&_mtx);
    while(_req_list.isEmpty())
        _cond.wait(&_mtx, 300);

    return _req_list.isEmpty();
}

/// Pазмер очередu
int ReqQueue::size()
{
    QMutexLocker locker(&_mtx);
    while(_req_list.isEmpty())
        _cond.wait(&_mtx, 300);

    return _req_list.size();
}

Но это как-то не так. При проверке на пустоту цикл while не заканчивается. Как это поправить корректно? На сколько я понял из обсуждения на то форуме, цикл нужен, но тогда какой?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.11.2011, 14:22
Сообщение #4


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

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

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




Репутация:   17  


Из главного потока запустил дополнительный. В дополнительном у меня вечный цикл (forever) - памяти жрет 50%. Есть возможность, не отменяя цикла forever сделать так, чтобы память не жралась безмерно?

С потоками уже не раз работал, но еще ни разу не использовал forever в доп. потоке, потому такие вопросы и встают.

Пока что делаю так (память жрет):
/// Запуск потока вычисления
void CalcThread::run()
{
    forever
    {
        wait(_sec * TO_MILLISEC);
        if(QueueRequests.isEmpty())
            continue;

        Request request(QueueRequests.takeRequest());
        int error_code;
        double result = doOperation(request.type_work, request.first_operand, request.second_operand, error_code);
    }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Потоконезависимые очереди   7.11.2011, 10:28
- - BRE   Что имеется ввиду под "потоконезависимые...   7.11.2011, 11:44
|- - AD   Цитата(BRE @ 7.11.2011, 12:44) Что имеетс...   7.11.2011, 12:02
|- - BRE   Цитата(AD @ 7.11.2011, 13:02) Но такое в ...   7.11.2011, 12:23
|- - AD   Цитата(BRE @ 7.11.2011, 13:23) Конечно во...   7.11.2011, 12:45
|- - BRE   Цитата(AD @ 7.11.2011, 13:45) Например, ч...   7.11.2011, 13:09
|- - AD   Цитата(BRE @ 7.11.2011, 14:09) Опиши, как...   7.11.2011, 13:31
- - Iron Bug   в бусте есть библиотека intrusive - там реализован...   7.11.2011, 12:45
- - Алексей1153   без синхронизации никуды )   7.11.2011, 13:17
- - BRE   На соседнем форуме обсуждали. Одна из тем: http://...   7.11.2011, 13:50
|- - AD   Цитата(BRE @ 7.11.2011, 14:50) На соседне...   9.11.2011, 17:30
- - BRE   Не нужны там семафоры (для другого они заточены), ...   9.11.2011, 17:45
|- - AD   Цитата(BRE @ 9.11.2011, 18:45) Не нужны т...   9.11.2011, 18:19
- - BRE   Чаще всего встречал перевод "условные перемен...   9.11.2011, 19:05
|- - AD   Ага. Ну тут еще вопросы. Смысл программы следующий...   10.11.2011, 10:19
|- - AD   Из главного потока запустил дополнительный. В допо...   10.11.2011, 14:22
- - BRE   Не нужно ждать условную переменную. Она нужна в ра...   10.11.2011, 10:26
- - BRE   "Память жрет" это ты про "процессор...   10.11.2011, 15:27
|- - AD   Цитата(BRE @ 10.11.2011, 16:27) "Пам...   10.11.2011, 15:30
- - Iron Bug   дык, в безусловном цикле крутится - потому и жрёт....   10.11.2011, 15:38
|- - AD   А вот так в поток не попадаю вторично: /// Запуск ...   10.11.2011, 15:47
- - BRE   Пытаешься написать методом научного тыка?   10.11.2011, 16:19
|- - AD   Цитата(BRE @ 10.11.2011, 17:19) Пытаешься...   10.11.2011, 16:26
- - BRE   exec никуда не возвращает, она просто запускает ци...   10.11.2011, 16:36
- - AD   Цитата(BRE @ 10.11.2011, 17:36) exec нику...   10.11.2011, 16:40
- - BRE   Цитата(AD @ 10.11.2011, 17:40) Цитата(BRE...   10.11.2011, 16:58


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


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




RSS Текстовая версия Сейчас: 27.11.2024, 2:05