Как сказал Эйл, вам следует проверить, что вы используете XInitThreads.
Я смог получить некоторые хорошие результаты, когда использовал фоновый поток для рисования окон анимации.Кажется, нет реальной проблемы, если вы придерживаетесь кода для рисования.
Если вам нужно больше этого, и поскольку вы используете низкоуровневый libX11, лучше всего просто открыть несколько соединений X11 и использовать одно соединение на окно верхнего уровня,Я сделал это 10 лет назад, когда играл в кроссплатформенный инструментарий BeOS, и когда все было в худшем состоянии, то сейчас.
Вы можете использовать это даже для обработки событий и дочерних окон верхнего уровня.Но для этого нужен какой-то очень хитрый код для масок XEvent.