Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » SDL_CreateThread

Ответить
Настройки темы
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

 

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Сразу оговорюсь, я не пишу на С, но проблемы, думаю, некоторые во всех языках схожи.
Возможна следующая вещь: два потока обращаясь к объектам должны синхронизировать свою работу. Скажем при работе многопоточного процесса в Delphi каждый поток, обращаясь к визуальному компоненту должен вызывать его методы через функцию Synchronize, чтобы ничего не глючило. Возможно стоит покопать в эту сторону, но лучше дождаться спецов по С, тут их есть

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 04:24, 30-01-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » SDL_CreateThread

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход