#cpp #linux #многопоточность #opengl
g++ -std=c++0x main.cpp -pthread -o main -lglut -lGL - вот так выглядит скрипт, которым
я компилирую свой код.
При запуске программы получаю ошибку
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
если компилировать g++ -std=c++0x main.cpp -pthread -o main -lglut (есть без параметра
-lGL), то многопоточность работает, но отрубается OpenGL, разумеется чтобы это скомпилить
я закомментил все что связано с opengl. Нужно чтобы одновременно работали и многопоточность
и OpenGL.
Код:
#include
#include
#include
float x=-0.5;
using namespace std;
void renderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.0,0.5,0.0);
glVertex3f(0.5,-0.5,0.0);
glEnd();
glRotatef(10,0,0,1);
glutSwapBuffers();
}
void t1()
{
while(x<1)
{
x=x+0.1;
cout << x << endl;
}
}
int main(int argc, char **argv)
{
thread thr(t1);
thr.join();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_MULTISAMPLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("ss");
glEnable(GL_MULTISAMPLE);
glutDisplayFunc(renderScene);
glutMainLoop();
return 0;
}
Ответы
Ответ 1
А если добавить вот эту опцию компиляции -D_REENTERANT ? UPD: Вот так работает, Вы забыли подключить библиотеку -lpthread g++ -c ./test.cpp -std=c++0x -pthread -D_REENTERANT g++ -o ./test ./test.o -lglut -lGL -lm -lpthread -pthread
Комментариев нет:
Отправить комментарий