GLUT и многопоточность
Если у меня есть mainthread, который устанавливает окно GLUT, а затем создает рабочий поток для выполнения вычислений, и во время вычислений некоторых событий в рабочем потоке я хочу обновить свое окно GLUT. Как я могу это сделать? По-видимому, я не могу вызывать функции переизбытка непосредственно из рабочего потока.
Я хотел бы установить какой-нибудь флаг 'updateflag', который будет проверен в цикле бездействия glut, и если он установлен, то перерисовать окно GLUT, но, по-видимому, он также не работает для вызова функций glut из цикла бездействия (или, по крайней мере, не должен быть сделано).
Итак, как правильно это сделать?
Спасибо!
2 ответа
Это общая проблема с большинством каркасов GUI (большинство из них обычно не являются поточно-ориентированными).
Нормальным решением является публикация вызовов в главном цикле событий. Я не уверен, какую библиотеку потоков вы используете (у некоторых, вероятно, будет концепция делегатов и т. Д.), Но в вашем случае простая очередь событий, вероятно, сделает это.
И да, вы можете перерисовать окно из функции ожидания. По крайней мере, я всегда делал это...
ну, я реализовал многопоточность в GLUT для вычислений, что я делаю, это и флаг bool, который сообщает о перенасыщении, как только событие произошло в другом потоке, тогда у меня есть стек с данными, собранными в другом потоке, и я просто повторно использую стек в основном потоке GLUT, таким образом мне удается поддерживать работу перенасыщения, но не останавливать рендеринг.
Я использую Async <- для многопоточных функций