Моя попытка написать оболочку Xlib для реализации методов тройной буферизации.С помощью которого человеку нужно только вычислить свою матрицу отображения и передать ее в API для отображения.У меня есть две отдельные темы для обработки событий и отображения.Поток событий, кажется, выполняется без каких-либо проблем, однако поток отображения, когда используется со стандартными функциями Xlib, такими как XDrawRectangle, XFillArc, XSetForeground и т. Д., Кажется, вызывает ошибку сегментации неизвестного характера.
Этомоя часть выполнения потока:
int startx(){
pthread_t eventsThread, displayThread;
char msg1[15] ="Events Thread", msg2[15] = "Display Thread";
int pid1, pid2;
pid1 = pthread_create( &eventsThread, NULL, eventsHandler, (void*) msg1);
pid2 = pthread_create( &displayThread, NULL, displayHandler, (void*) msg2);
pthread_join(eventsThread, NULL);
pthread_join(displayThread, NULL);
return 0;
};
Это мой displayHandler:
void *displayHandler(void* args){
cout<<connectionNumber<<endl;
Color c(50,50,250);
int width = 40, height = 60,x = 500, y = 100;
for(int i=0;i<1300;i++){
XSetForeground(display, xgraphics, c.decimal);
XDrawRectangle(display, mainWindow, xgraphics, x, y, width, height);
XFlush(display);
}
}
Кажется, что eventsThread выполняется без ошибок.Кроме того, я попытался сделать функцию отображения частью основной программы, с теми же результатами.
Если бы кто-нибудь мог сказать мне альтернативный / правильный метод рисования окна с использованием матриц, это было бы очень полезно.
Примечание: Color - это самодельный класс для простоты вычисления цвета.