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.

Pasando los argumentos principales a un segundo hilo para el inicio de freeglut.

Soy nuevo en OpenGL y Freeglut y quiero crear un hilo para la salida gráfica periférica que no sea el hilo del sistema operativo. Cuando creo el segundo hilo, quiero pasar los argumentos principales de la línea de comandos para poder inicializar freeglut.

Estoy usando:

Nombre: Code::Blocks, Versión: 20.03-r11997, Versión del SDK: 2.0.0, Versión de Scintilla: 3.7.5, Nombre del compilador: GNU GCC Compiler.

Nombre del sistema operativo: Ubuntu 20.04.3 LTS, Tipo de sistema operativo: 64 bits, Versión de GNOME: 3.36.8, Sistema de ventanas: X11.

Error:

afirmación estática fallida: std::thread: los argumentos deben ser invocables después de la conversión a valores x.

include "Thread.h"
include <thread>
include <gl glut.h="">

class Thread
{
    public:
        Thread()
        {

        }
    ~Thread()
    {

    }
    static void run_Td_1(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitWindowSize(640,480);
        glutInitWindowPosition(10,10);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

        glutCreateWindow("GLUT Shapes");

        glutMainLoop();
    }

protected:

private:

};

int main(int argc, char *argv[])
{
    std::thread td1(Thread::run_Td_1, &argc, argv);

    return EXIT_SUCCESS;
}

¿Cómo puedo pasar los argumentos correctamente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código actual es que está intentando pasar la dirección de la variable argc al hilo en lugar de su valor real. Para pasar correctamente los argumentos, se deben realizar los siguientes cambios:

    #include "Thread.h"
    #include <thread>
    #include <gl glut.h="">
    
    class Thread
    {
    public:
        Thread() {}
    
        ~Thread() {}
    
        static void run_Td_1(int argc, char *argv[])
        {
            glutInit(&argc, argv);
            glutInitWindowSize(640,480);
            glutInitWindowPosition(10,10);
            glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    
            glutCreateWindow("GLUT Shapes");
    
            glutMainLoop();
        }
    };
    
    int main(int argc, char *argv[])
    {
        std::thread td_1(Thread::run_Td_1, argc, argv);
        td_1.join();
        return EXIT_SUCCESS;
    }
    

    En el código anterior, se pasa el valor real de argc al constructor del hilo en lugar de su dirección. Además, se une el hilo para esperar a que termine antes de que el programa finalice.

Comments are closed.