0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
1

Многопоточность в QT

05.09.2016, 12:15. Показов 2622. Ответов 30
Метки нет (Все метки)

Нужно мне написать консольную программу, которая выводит на экран оптимальное количество потоков, которые можно запустить на данном компьютере. Подскажиет где я могу найти инфу или код для написання програмы?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2016, 12:15
Ответы с готовыми решениями:

Многопоточность
Имеется приложение на Си в VS 2008. Приложение может создать большое количество экземпляров...

Многопоточность
Доброго времени суток! Пишу довольно редко, самостоятельно не получилось разобраться:( Сразу...

Многопоточность
Собираюсь делать терморегулятор на atmega16a. дисплей от нокии 1616, пульт от телевизора, дс18с20,...

Многопоточность
Мне нужно что бы сообщение System.out.println(String.format("%1$s будит парикмахера.",...

30
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
05.09.2016, 12:28 2
int QThread::idealThreadCount()

http://doc.qt.io/qt-5/qthread.... hreadCount
ну вот это почитай
http://doc.qt.io/qt-5/qtconcurrent-index.html
2
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
05.09.2016, 12:34  [ТС] 3
Юрий Петренко, но там нету как узнать оптимальное количество потоков (((
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
05.09.2016, 12:44 4
В смысле нет?

Returns the ideal number of threads that can be run on the system. This is done querying the number of processor cores, both real and logical, in the system. This function returns -1 if the number of processor cores could not be detected.

Эта фукция просто возвращает их число.
Т.е. число int , которое возвращает функция и есть оптимальное число потоков с учетом количества ядер процессора (физических и логических) в системе. возвращает -1 если невозможно установить.
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
05.09.2016, 12:55  [ТС] 5
Юрий Петренко, спасибо
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
05.09.2016, 13:01 6
класс QThread метод idealThreadCount(), вместе пишется это так:
QThread::idealThreadCount()
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
05.09.2016, 13:04  [ТС] 7
Юрий Петренко,
так?
C++ (Qt)
1
2
3
4
5
6
7
8
9
#include <QCoreApplication>
#include <QThread>
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QThread qTheard = QThread();
    qTheard.idealThreadCount();
    return app.exec();
}
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
05.09.2016, 13:15 8
Да но т.к. функция статическая, то можно без создания объекта. Вот так
C++ (Qt)
1
    int count =    QTheard::idealThreadCount();
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
05.09.2016, 13:28  [ТС] 9
Юрий Петренко, но оно не выводит на екран ничего

Добавлено через 4 минуты
C++ (Qt)
1
cout << "Count:" << count;
так не работает

Добавлено через 1 минуту
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include <QCoreApplication>
#include <QThread>
#include <QTextStream>
int main(int argc, char *argv[])
{
    QTextStream cout(stdout);
    QCoreApplication app(argc, argv);
    int count = QThread::idealThreadCount();
    cout << "Count:" << count;
    return app.exec();
}
Добавлено через 1 минуту
от так работает:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include <QCoreApplication>
#include <QThread>
#include <QTextStream>
int main(int argc, char *argv[])
{
    QTextStream cout(stdout);
    QCoreApplication app(argc, argv);
    int count = QThread::idealThreadCount();
    cout << "Count:" << count << endl;
    return app.exec();
}
0
1441 / 1322 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
05.09.2016, 15:51 10
Юрий Петренко, одно но!
Идеальное количество потоков != оптимальное количество потоков.
0
468 / 444 / 71
Регистрация: 29.05.2015
Сообщений: 2,908
05.09.2016, 19:30 11
Оптимальное количество - такое, которое требуется для решения задачи?

Например такая задача: в тарелке 100 конфет, 20 детей (каждый через свой промежуток времени) берут по одной конфете, когда конфеты в тарелке заканчиваются - зовут маму и она наполняет тарелку. Как запрограммировать такую задачу без 20-ти потоков - по числу детей?
0
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,889
05.09.2016, 22:57 12
Цитата Сообщение от alexu_007 Посмотреть сообщение
Как запрограммировать такую задачу без 20-ти потоков - по числу детей?
таймером
0
468 / 444 / 71
Регистрация: 29.05.2015
Сообщений: 2,908
06.09.2016, 08:54 13
Мда, работает, по крайней мере 4 таймера одновременно. А что-то у меня с таймерами не получалось. В длинных вычислениях я хотел на экран секунды выводить таймером - не сработало.
0
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,889
06.09.2016, 09:09 14
Цитата Сообщение от alexu_007 Посмотреть сообщение
по крайней мере 4 таймера одновременно.
одного достаточно
вот примерный обработчик таймера на 3 детей, можно и больше но писать лень
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int TimeChild[3]={10,13,5};
int tmpTimeChild[3]={0,0,0};
int heapCandy=100;
 
void fncTimers()
{
 
for(int i=0;i<3;i++)
{
 if(heapCandy==0)
    CallMamy();
 if(++tmpTimeChild[i]==TimeChild[i])
  {
   heapCandy--;
   tmpTimeChild[i]=0;
   }
}
}
0
92 / 92 / 33
Регистрация: 17.03.2012
Сообщений: 536
06.09.2016, 09:30 15
Цитата Сообщение от alexu_007 Посмотреть сообщение
когда конфеты в тарелке заканчиваются - зовут маму и она наполняет тарелку.
А если мама будет наполнять тарелку, когда кто-то из детей будет брать конфеты?
0
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,889
06.09.2016, 09:40 16
Цитата Сообщение от Slip. Посмотреть сообщение
А если мама будет наполнять тарелку, когда кто-то из детей будет брать конфеты?
там есть еще один подводный камень
одна конфета на тарелке и все 20 детей бросились её брать, будет как в анекдоте, рука а в неё воткнуты три вилки
нужно будет вводить какие то семафоры
0
468 / 444 / 71
Регистрация: 29.05.2015
Сообщений: 2,908
06.09.2016, 12:49 17
Цитата Сообщение от Slip. Посмотреть сообщение
А если мама будет наполнять тарелку, когда кто-то из детей будет брать конфеты?
Есть 2 варианта:

1. Когда ребёнок тыкается в пустую тарелку, он зовёт маму и ставит флаг, что маму позвал - что-бы ни он ни другие не беспокоили по пустякам - тогда мама после наполнения тарелки сбрасывает этот флаг.

2. Все, кто тыкнулся в пустую тарелку - зовут маму, но мама наполняет тарелку только если тарелка пуста. Если тарелка полна - ложные вызовы игнорятся. Мама не обрабатывает параллельно несколько вызовов - только первый. Когда наступает очередь второго - тарелка уже полна.

Если в тарелке одна конфета, и её бросятся забирать 20 детей - её заберёт кто-то один самый шустрый (кто на микросекунду обогнал остальных), остальные ткнутся уже в пустую тарелку и станут звать маму - тут проблем не возникает.

Где-то так. Это работает и ничего не виснет.
0
Модератор
Эксперт по электронике
8490 / 6317 / 854
Регистрация: 14.02.2011
Сообщений: 21,889
06.09.2016, 13:04 18
Цитата Сообщение от alexu_007 Посмотреть сообщение
её заберёт кто-то один самый шустрый
а кто у нас самый шустрый
есть камень с несколькими ядрами, соответственно несколько потоков которые выделяются параллельно
и вот эти несколько потоков одновременно обратились к данным
зачем то ведь семафоры, и прочие мьютексы придумали
0
92 / 92 / 33
Регистрация: 17.03.2012
Сообщений: 536
06.09.2016, 15:45 19
Цитата Сообщение от ValeryS Посмотреть сообщение
зачем то ведь семафоры, и прочие мьютексы придумали
А еще и разделяемую память!
А флаги ставить... моветончик
0
1441 / 1322 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
06.09.2016, 15:51 20
Slip., вы хотели сказать транзакционную память?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2016, 15:51

Многопоточность в C#
Всем доброго времени суток! Я с толкнулся с проблемой с которой сам никак не могу разобраться, суть...

Многопоточность
Всем привет. Есть текстовый файл, в котором записаны строки. Всё считываю в массив строк. Потом...

Многопоточность
Здравствуйте, что-то у меня не выходит ... Должно быть так А . . В А . . В А . . ...

Многопоточность
Товарищи! Создаю 23 потока. вот так: ff1 = new f1(false); ff1-&gt;Priority = tpLower;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.