Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuál es la diferencia entre crear un hilo sobrecargando el método run y crear un hilo mediante el método movetothread en Qt?

¿Cuál es la diferencia entre crear un hilo sobrecargando el método run y crear un hilo mediante el método movetothread en Qt?

Cuando uso subprocesos múltiples en Qt, he usado dos métodos hasta ahora. Uno es subclasificar QThread, reescribir la función de ejecución e implementar su propio código en la función de ejecución. Esta parte del código suele llevar mucho tiempo, o simplemente. bloques directamente. Por ejemplo, un bucle while que establece una bandera para determinar el final del bucle.

Hay muchos ejemplos de este tipo en Internet, así que no los escribiré.

Si escribes así, hay algunas cosas que necesitas saber.

Con el método de subclasificación de QThread, solo las partes internas de la función de ejecución se ejecutarán en el subproceso secundario, y el resto, como la función de ranura, etc., aún se ejecutará en el subproceso principal. hilo (suponiendo que el hilo secundario está en el hilo principal) abierto en el hilo).

Otro método es crear una subclase de QObject, crear un nuevo hilo y luego usar MoveToThread para mover el objeto de esta clase al hilo recién creado, lo que hará que todas sus funciones de ranura se ejecuten en el hilo recién abierto. .

Si ejecuta una función miembro en el proceso principal a través de (QObject).abc(), puede recibir "QObject::killTimer: los temporizadores

no se pueden detener desde otro hilo". (QObject::killTimer:Timer

no se puede detener desde otro hilo) error.

Con el segundo enfoque, parece que te encuentras con el problema de que si bloqueas un hilo secundario en una función de ranura, las otras funciones de ranura no podrán recibir señales del hilo principal

.