Потоки функции в Qt - PullRequest
       25

Потоки функции в Qt

2 голосов
/ 15 февраля 2012

У меня есть цикл for, который будет выполняться фиксированное количество раз, обычно в диапазоне 100-300 в зависимости от входа.Каждая итерация этого цикла вызывает функцию, к которой я хочу подключиться.Функция для извлечения данных извлекает данные из входного файла, делает с ним что-то и затем записывает их в новом формате в выходной файл ...

Вот код высокого уровня:

void myClass::processFile()
{
    ...

    for (int index = 0; index < 200; index++)
    {
        //Function or loop to thread
        generateData(someMapOfMaps1[index], someMapOfMaps2[index]);
    }
}

Затем внутри generateData в тот же класс:

void myClass::generateData(QMap<float, foo*> mapA, QMap<float, foo*> mapB)
{
    //read in data from a file
    //process data
    //write data to a different file
}

Я играл с QtConcurrent::run() и QtConcurrent::mapped(), но не смогмного удачи.Я считаю, что mapped() был бы отличным выбором, но моя функция использует 2 карты вместо одной.

Я использовал это как ресурс вокруг слайда 25: http://www.develer.com/promo/workshop/enhancing_with_multi_threading.pdf

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 февраля 2012
  • прочитайте это http://developer.qt.nokia.com/doc/qt-4.8/qwaitcondition.html
  • унаследуйте ваш класс от QThread
  • вставьте run() вызов вашей функции в бесконечный цикл
  • остановка циклана QWaitCondition перед вызовом generateData
  • условие пробуждения в вашем for цикле
0 голосов
/ 15 февраля 2012

Положите цикл, файлы для чтения / записи, «некоторые вещи», много в потоке. Попытка зарезать один вызов функции на цикл - это слишком много избегаемых межпотоковых связей. Упакуйте спецификации файлов и т. Д. В объект myClass, сообщите его потоку и просто отпустите ...

...