2012-02-14 6 views
2

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

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

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(), но не имею большой л UCK. Я считаю, что mapped() был бы отличным выбором, но моя функция занимает 2 карты вместо одного.

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

Спасибо!

ответ

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^