БГ
Булат ГиниятовЖел. 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.

                        Пікірлер

                        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                        Кіріңіз немесе Тіркеліңіз
                        AD

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

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

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

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

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

                        • Нәтиже:20ұпай,
                        • Бағалау ұпайлары-10
                        Соңғы пікірлер
                        ИМ
                        Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                        Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                        Evgenii Legotckoi
                        Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                        A
                        ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                        Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                        ИМ
                        Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                        d
                        dblas5Шілде 5, 2024, 11:02 Т.Ж.
                        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                        Енді форумда талқылаңыз
                        m
                        moogoҚар. 22, 2024, 7:17 Т.Ж.
                        Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
                        Evgenii Legotckoi
                        Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                        t
                        tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                        google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                        NSProject
                        NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                        Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

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