es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problemas de multithreading con la aplicación de wxWidgets.

Hemos desarrollado una aplicación utilizando wxWidgets. Ahora estamos incorporando gráficos utilizando Vulkan.

Al usar hilos, a veces es necesario “dormir” el hilo principal para esperar a que los hilos de trabajo se detengan. Este método funciona cuando no se utiliza wxWidgets. Sin embargo, cuando se utiliza wxWidgets, cualquier llamada a la función sleep hace que todos los hilos se duerman.

Podemos resolver esto llamando adecuadamente a la función “Yield” de wx, pero esto causa “desplazamiento” en los gráficos por alguna razón.

¿Existe algún otro método que podamos utilizar para hacer que el hilo principal espere a que los hilos de trabajo finalicen? Todo esto se realiza en un proceso altamente crítico de velocidad, por lo que preferiríamos una solución eficiente que “desacople” wx de los trabajos con hilos.

Muchas gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en C ++, multihilo y wxWidgets, entiendo el problema que enfrenta al incorporar gráficos de Vulkan en su aplicación basada en wxWidgets con hilos de trabajo. Si usa la función Sleep para esperar a los hilos de trabajo, hace que todos los hilos duerman. Aunque puede usar la función Yield para resolver esto, resulta en irregularidades en los gráficos.

    Para mantener alta velocidad, puede usar la clase std::condition_variable de C ++11, que permite que el hilo principal espere a que los hilos de trabajo terminen sin bloquearlos. Esta es una solución eficiente que desacopla wx de los hilos de trabajo.

    Así es como puede usar std::condition_variable:

    1. Cree una instancia de std::mutex y std::condition_variable en el hilo principal.
    2. En los hilos de trabajo, use std::unique_lock en std::mutex para bloquear los datos compartidos.

    3. Después de terminar el trabajo, notifique al hilo principal usando la instancia de std::condition_variable.

    4. En el hilo principal, use std::unique_lock para bloquear std::mutex y espere en la instancia de std::condition_variable hasta que reciba una señal de los hilos de trabajo.

    Al usar std::condition_variable, puede evitar el uso de las funciones Sleep o Yield que causan problemas gráficos en wxWidgets.

Comments are closed.