Dosnt изменить значение на ссылку - PullRequest
0 голосов
/ 24 февраля 2020

Попробую запустить несколько QtConcurrent, для функции, которая должна изменить значение:

void MyClass::parse_data_request(QVector<event_discription> &event_vec, QString list_events, QString num, QStringList &loc_key_collector, QStringList &loc_key_ru)

И выполнить команду throw:

QVector<QFuture<void> > threads(thread_counts);
    for(int i = 0; i < thread_counts; i++)
        {
            threads[i] = QtConcurrent::run(this,&MyClass::parse_data_request, it_event[i], list_events[i], proxy[proxy_num + i],glob_key_collector[i], glob_key_ru[i]);
            qDebug() << "Run thread No " << i;
        }
        for(int i = 0; i < thread_counts; i++)
        {
            threads[i].waitForFinished();
        }

В функции я добавляю данные в event_ve c, но когда

for(int i = 0; i < thread_counts; i++)
    {
        threads[i].waitForFinished();
    }

сделано, it_event [i], glob_key_collector [i] и glob_key_ru [i] не изменяются, они имеют нулевые элементы. Что я делаю не так?

PS: QtConcurrent :: run вызывается в другой функции MyClass

1 Ответ

0 голосов
/ 24 февраля 2020

Спасибо @molbdnilo за пометку моего неправильного понимания QtConcurrent :: run Рабочая версия:

threads[i] = QtConcurrent::run(this,&marathon_parser::parse_data_request, std::ref(it_event[i]), list_events[i], proxy[proxy_num + i],std::ref(glob_key_collector[i]), std::ref(glob_key_ru[i]));

QtConcurrent :: run создайте копию ВСЕХ аргументов функции по значению, таким образом, мы должны использовать std :: ссылка для передачи ссылки.

...