Resumen de los puntos de conocimiento de QT (3)

1. Al compilar una biblioteca compartida, debe marcarse como exportada. Para utilizar bibliotecas compartidas en el lado del cliente, algunas plataformas pueden requerir una declaración de importación especial.

Por lo tanto, Qt proporciona dos macros especiales:

  • Q_DECL_EXPORT: Al compilar la biblioteca compartida, debe agregarse a la declaración de símbolo utilizada.
  • Q_DECL_IMPORT: Al compilar un cliente (usando la biblioteca compartida), debe agregarse a la declaración de símbolo utilizada.

2. QLibrary carga la biblioteca compartida en tiempo de ejecución Debe tenerse en cuenta que el nombre de la función que se analizará debe exportarse como una función C. Esto significa que si la biblioteca es un compilador de C ++, entonces la función debe estar envuelta en un extern "C"bloque. También debe ser utilizado Q_DECL_EXPORTy Q_DECL_IMPORTderivado explícitamente de la biblioteca de funciones. Si no puede acceder a las bibliotecas dinámicas .hcuando los archivos de encabezado, este método es útil.

3. Si usa una biblioteca de enlaces estáticos, el archivo pro siempre debe usar ambos LIBSy PRE_TARGETDEPS.

4. QMutex: un subproceso bloquea un mutex para obtener acceso a los recursos compartidos.

5. QReadWriteLock: distingue el acceso de "lectura" y "escritura", permitiendo la lectura simultánea, mejorando así el paralelismo

6, semáforo QSemaphore, variable de condición QWaitCondition es mejor

7. QMutexLocker, QReadLocker y QWriteLocker son clases de conveniencia, cuando se construyen, bloquearán el recurso; cuando se destruyan, se desbloquearán automáticamente

8. Seguridad de subprocesos: puede ser llamado por varios subprocesos al mismo tiempo

9. Reentrada: puede ser llamado por varios subprocesos al mismo tiempo, pero cada persona que llama solo puede usar sus propios datos.

Por lo tanto, una función segura para subprocesos siempre es reentrante, pero una función reentrante no es necesariamente segura para subprocesos.

10. El quinto parámetro de conexión:

  • Conexión automática (predeterminado): si la señal se emite en el hilo al que está conectado el receptor, es equivalente a Conexión directa. De lo contrario, es equivalente a Conexión en cola.
  • Conexión directa: cuando se transmite la señal, la función de ranura se llama inmediatamente. La función de ranura se ejecuta en el hilo del transmisor de señal, pero no necesariamente en el hilo del receptor.
  • Conexión en cola: cuando el control vuelve al bucle de eventos del hilo del destinatario, se llama a la función de ranura. La función de ranura se ejecuta en el hilo del receptor.
  • Bloqueo de la conexión en cola: la situación de llamada de la función de ranura es la misma que la de la conexión en cola, excepto que el hilo actual se bloqueará hasta que vuelva la función de ranura.
  • Nota: El uso de este tipo de conexión en el mismo hilo provocará un interbloqueo.
  • Conexión única: el comportamiento es el mismo que el de Conexión automática, pero la conexión solo se establecerá cuando "no sea la misma que una conexión existente", es decir: si la misma señal se ha conectado a la misma función de ranura, entonces el la conexión no se volverá a conectar. Se estableció y connect () devolverá falso.
     

11. Nunca use el objeto QThread (esto) como el padre de un objeto creado en el hilo

12. Aunque QObject es reentrante, las clases de GUI, especialmente QWidget y todas sus subclases, no son reentrantes, solo se pueden usar en el hilo principal

Supongo que te gusta

Origin blog.csdn.net/Chiang2018/article/details/103372580
Recomendado
Clasificación