Aprendiendo a usar QThreadPool



  • Buenas, hace poco que he empezado a programar con multihilos y tengo algunas dudas.

    Mi idea inicial para el programa que tengo entre manos era la siguiente:

    Tengo un array de objetos que he inicializado con la información extraida de una base de datos, ahora quiero crear tantos hilos como objetos hay para que cada uno de los objetos procese la información que se les ha pasado y la guarde en un hilo de ejecución diferente.

    Leyendo la documentación oficial del framework QT, que uso desde hace unas escasas 2 semanas, he visto que existe QThreadPool. Todo un descubrimiento para mi.

    También he leido "Threads and QObjects" y ahora entiendo por qué no me funcionaba mi programa, no puedo crear objetos en el hilo principal y usar sus métodos/funciones en otro hilo, "no se garantiza su funcionamiento" como dice la documentación.

    Así que mi duda es lasiguiente:

    ¿Cómo puedo crear cada uno de los objetos que necesito en un hilo diferente e inicializarlos con la información que he extraido del hilo principal? ¿Cómo a su vez los manejo con QThreadPool?

    Supongo que son preguntas muy básicas, pero estoy estoy empezando con la programación multihilo, hace poco que uso QT, es muy nuevo para mi y me hago un lio.

    Gracias de antemano por vuestra ayuda.



  • Hace poco tuve que usar QThreadPool, el uso básico sería este:

    // Puede ser una función tradicional o un método estático.
    // func puede recibir hasta un máximo de 5 parámetros.
    void func(QMutex *mutex, otrosParametros) 
    { 
        mutex->lock();
        // Hacer lo que haya que hacer aquí.    
        mutex->unlock();
    }
    
    
    int N = 1000;
    QThreadPool threadPool;
    
    // El mutex se usa para bloquear la modificación simultanea 
    // de prametros globales.
    QMutex mutex;
    
    for (int i = 0; i < int; i++) {
        QtConcurrent::run(&threadPool, func, &mutex, otrosParametros);
    }
    
    threadPool.waitForDone();
    
    // Hacer algo con el resultado de los threads.
    
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.