БГ
Булат ГиниятовЖел. 9, 2018, 2:01 Т.Қ.

Потоки и обращение к ним

Добрый день!

Я создаю потоки так

for(int i=1;i<=5;i++){
        MyObject *myobject = new MyObject;
        QThread *mythread = new QThread;
        myobject ->moveToThread(mythread);
        QObject::connect(mythread, &QThread ::started, myobject , &MyObject ::process);
        mythread ->start();
}

Подразумевается, что потоки не завершаются сами, а по сигналу.
Как я могу обратится к определенному потоку, чтобы послать ему сигнал завершения?

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

11
Александр Панюшкин
  • Жел. 9, 2018, 2:29 Т.Қ.

Сохранить ссылки на потоки в массиве или векторе. Такой вариант не подходит?

    Есть возможность привести пример в массиве или в векторе?

      Александр Панюшкин
      • Жел. 9, 2018, 2:40 Т.Қ.
      • (өңделген)

      Пишу с телефона, могу опечататься.

      Перед циклом инициируем переменную. Например, так:

      QList<QThread*> threadList;
      

      Затем в цикле добавляем поток в массив:

      threadList.append(mythread);
      

      Обращение, соответственно, затем либо через цикл, либо напрямую:

      QThread *thread = threadList.at(n);
      

      Где n - номер потока.

        Александр Панюшкин
        • Жел. 9, 2018, 2:42 Т.Қ.
        • (өңделген)

        Поправил.

          БГ
          • Жел. 12, 2018, 11:32 Т.Ж.

          Допустим в

          MyObject *myobject = new MyObject;
          

          есть метод

          start(){
          while(aaa){
          ////////////////
          }
          }
          

          Как мне обратиться к методу

          stop(){
          aaa=false;
          }
          

          ?
          Соответственно потоков столько, сколько их в

          QList<QThread*> threadList;
          

            Как мне из главного потока обратиться к методу объекта, который я поместил в отдельный поток?

              Evgenii Legotckoi
              • Жел. 13, 2018, 4:17 Т.Қ.

              Да точно также, как и к обычному объекту. Просто в том методе лучше мьютексами обезопаситься, ну а по всем потокам можно пройтись в цикле.

                БГ
                • Жел. 14, 2018, 1:32 Т.Ж.

                Если есть возможность, приведите пожалуйста пример. Соответственно потоки у меня создаются в цикле и мне необходимо обратиться к методу объекта помещенного в поток. Пример кода выше

                  Evgenii Legotckoi
                  • Жел. 14, 2018, 3:27 Т.Ж.
                  • Жауап шешім ретінде белгіленді.

                  Вечером или чуть позже.

                  А в свою очередь кроме списка потоков, создайте ещё и список указателей на объекты. Тогда вы сможете без проблем и не трогая сами потоки, вызывать методы объектов в потоках.

                    Александр Панюшкин
                    • Жел. 14, 2018, 3:44 Т.Ж.
                     QVector<MyObject*> objectsVector;
                      QVector<QThread*> threadsVector;
                    
                      for(int i=1;i<=5;i++){
                              MyObject *myobject = new MyObject;
                              QThread *mythread = new QThread;
                              objectsVector.append(myobject);
                              threadsVector.append(threadsVector);
                              myobject ->moveToThread(mythread);
                              QObject::connect(mythread, &QThread ::started, 
                                               myobject , &MyObject ::process);
                              mythread ->start();
                      }
                    
                      // Обращение напрямую по номеру потока (так себе вариант - можно ошибиться с 
                      // номером и вылезти за пределы массива, лучше делать через отдельную функцию
                      // и проверять номер потока на валидность)
                      int n = 2; // Задали номер потока - обращаю внимание, в вас в цикле отсчет идет
                      // с единицы, а в массивах с нуля!
                      objectsVector.at(n)->start(); //вызов функции старт
                      objectsVector.at(n)->stop(); // вызов функции стоп
                    
                      // Тоже самое, но в цикле:
                      for (int i = 0; i < objectsVector.count(); i++) {
                          objectsVector.at(i)->start();
                          objectsVector.at(i)->stop();
                        }
                    

                      Большое всем спасибо за помощь! Использую вариант с QList.

                        Пікірлер

                        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                        Кіріңіз немесе Тіркеліңіз
                        OI
                        • Ora Iro
                        • Жел. 24, 2024, 5:38 Т.Қ.

                        C++ - Тест 001. Первая программа и типы данных

                        • Нәтиже:40ұпай,
                        • Бағалау ұпайлары-8
                        AD

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Нәтиже:50ұпай,
                        • Бағалау ұпайлары-4
                        m
                        • molni99
                        • Қаз. 26, 2024, 11:37 Т.Ж.

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Нәтиже:80ұпай,
                        • Бағалау ұпайлары4
                        Соңғы пікірлер
                        ИМ
                        Игорь МаксимовҚар. 22, 2024, 10:51 Т.Қ.
                        Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                        Evgenii Legotckoi
                        Evgenii LegotckoiҚар. 1, 2024, 12:37 Т.Ж.
                        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                        A
                        ALO1ZEҚаз. 19, 2024, 6:19 Т.Қ.
                        Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                        ИМ
                        Игорь МаксимовҚаз. 5, 2024, 5:51 Т.Қ.
                        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                        d
                        dblas5Шілде 5, 2024, 9:02 Т.Қ.
                        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                        Енді форумда талқылаңыз
                        n
                        nklyҚаң. 3, 2025, 1:52 Т.Қ.
                        Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                        AW
                        Ayden WatkinsҚаң. 2, 2025, 11:09 Т.Ж.
                        Why Paying for a Research Paper Can Be a Smart Choice Writing a research paper can be a daunting task, especially when faced with tight deadlines, complex topics, or a lack of resources. For many students, paying for a research paper is a practical…
                        p
                        pimacontrols85Жел. 31, 2024, 8:39 Т.Қ.
                        Finding the Right Rittal Small Enclosure for Your Needs Rittal is a leading manufacturer of enclosures for industrial and IT applications. Their small enclosures offer a compact and reliable solution for a wide range of needs, from housing electronic…
                        Donald Randolph
                        Donald RandolphЖел. 30, 2024, 1:59 Т.Қ.
                        Personal Injury lawyer Santa Monica As an experienced Santa Monica personal injury lawyer, Donald C. Randolph has recovered over $100 Million in verdicts and settlements for our clients. In severe injury cases, this compensation i…
                        Nirvana Yoga School
                        Nirvana Yoga SchoolЖел. 30, 2024, 4:13 Т.Қ.
                        OAuth2.0 через VK, получение email Nirvana Yoga School is one of the most trusted and reputed traditional Rishikesh yoga courses , India certified by Yoga Alliance, USA. We aim to spread traditional yoga teachings so t…

                        Бізді әлеуметтік желілерде бақылаңыз