what understanding loop event multithreading qt event-handling thread-safety

multithreading - understanding - Threads & Event loop en la aplicación Qt



understanding event loop (2)

Comience leyendo aquí para obtener información básica y aquí para obtener la información completa.

¿Alguien puede explicar la diferencia en el ciclo de Subprocesos y Eventos, y cómo puedo usar esto en la aplicación QT?

¿Dónde puedo usar mover al hilo y completar la clase de hilo?


Cada subproceso procesa su propio ciclo de eventos, normalmente no tiene que preocuparse por esto; se ocupa de usted y, a menos que tenga un motivo específico para que lo dejen en paz.

QThread es una clase provista por Qt para que uses para controlar el funcionamiento de un hilo. El método de "poner" objeto en ese hilo es usar la función moveToThread ().

No debe heredar la clase QThread para ejecutar algún código dentro de un hilo (use la función moveToThread), la única razón para heredar la clase QThread es si desea cambiar el comportamiento del control de hilo.

A continuación se muestran los pasos básicos para ejecutar un objeto dentro de un hilo:

MyObj *myObj = new MyObj(0); // 0 = no parent if your object inherits QObject QThread* thread = new QThread; myObj->moveToThread(thread); QObject::connect(thread, SIGNAL(started()), myObj, SLOT(run())); thread->start();

Una vez que llame a start (), el hilo se iniciará y emitirá la señal de inicio, su objeto lo recibirá y lo procesará en su ranura / función run ().

Nota: el hilo no termina cuando la función / ranura de ejecución () dentro de su objeto finaliza (por lo que no necesita hacer un ciclo "para siempre"). El hilo solo se detiene cuando le dices que abandone (o lo destruya), esto significa que tu hilo puede estar inactivo hasta que reciba una señal o evento - aquí es donde entra el bucle de evento - los eventos entrantes son manejados por el bucle de evento dentro del QThread class.

Nota: también este código es un fragmento: no se trata de cerrar el hilo, hay otros bits de código "de plantilla" que puede usar para esto.

Editar

Por lo tanto, los eventos son manejados por la cola de eventos (cosas como eventos de clic de mouse de tipo base QEvent), que el sistema usa más cuando algunos eventos pueden desencadenar señales (onClicked por ejemplo). Las señales y las ranuras son un mecanismo diferente que el usuario usa más cuando maneja estos en sus ranuras usando la función connect (). Aquí hay una mejor explicación que podría encontrar: ver aquí