SDL_CreateThread
|
Montu
Сообщения: n/a |
Всем привет!! Пробл вот в чем. Решил пустить поток с помошью SDL_CreateThread и непосредственно из него выресовывать объект. Раньше я это делал непосредственно в самом цикле программы и всё замечательно работало. Но после того как я поместил функцию render в поток программа стала вылетать с ошибкой Fatal signal: Segmentation Fault (SDL parachute Deployed). В чем может быть ошибка раскрытия этого греба...ого парашута SDL. Помогите пожалуйста кому не лень.
Заранее огромное спасибо! void render() { * * * *glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); * * * *glLoadIdentity(); * * * *glTranslatef(0,0, -1.7); * * * *glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // ñì. * * * *glLineWidth(6.0); * * * *glBegin(GL_LINES); * * * *glVertex2f(-0.565,0.121); * * * *glVertex2f(-0.565,0.352); * * * *glEnd(); * * * *glFlush(); * * * *SDL_GL_SwapBuffers(); } int threadFunc(void *read) { *while(!done) *{ * *SDL_Delay(100); * *render(); *} *return (0); } int main(int argc, char **argv) { *SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO); *SDL_SetVideoMode(WIDTH,HEIGHT,32,SDL_OPENGL | SDL_FULLSCREEN); *glMatrixMode(GL_PROJECTION); *glLoadIdentity(); *gluPerspective(45.0,(GLfloat)width/(GLfloat)height,0.1f,50.0f); *glMatrixMode(GL_MODELVIEW); *glLoadIdentity(); *SDL_ShowCursor(SDL_DISABLE); *glClearDepth(1); *glDepthFunc(GL_LEQUAL); *glEnable(GL_DEPTH_TEST); *glEnable(GL_MAP2_VERTEX_3); *glEnable(GL_AUTO_NORMAL); *glEnable(GL_LIGHTING); *glEnable(GL_LIGHT0); *glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); *glLightfv(GL_LIGHT0, GL_POSITION, lightpos); *glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); *glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); *glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); *glClearColor(1,1,1,1); *SDL_Thread *thread; *thread = SDL_CreateThread(threadFunc, NULL); *if (thread == NULL) *{ * *cout<<"Thread error"<<endl; * *return; *} *while(!done) *{ * *SDL_Event event; * *while(SDL_PollEvent(&event)) * *{ * * *switch(event.type) * * *{ * * * * *case SDL_KEYDOWN: * * * * * *done = 1; * * * * * *break; * * *} * *} * *SDL_Delay(20); // * *render(); *} *SDL_Quit(); *return 0; } |
|
Отправлено: 18:06, 29-01-2004 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Сразу оговорюсь, я не пишу на С, но проблемы, думаю, некоторые во всех языках схожи.
Возможна следующая вещь: два потока обращаясь к объектам должны синхронизировать свою работу. Скажем при работе многопоточного процесса в Delphi каждый поток, обращаясь к визуальному компоненту должен вызывать его методы через функцию Synchronize, чтобы ничего не глючило. Возможно стоит покопать в эту сторону, но лучше дождаться спецов по С, тут их есть ![]() |
------- Отправлено: 04:24, 30-01-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
|