Для моей стажировки по интерфейсу «мозг-компьютер» мне нужно создать очень быстрые мерцающие квадраты на ЭЛТ-мониторе (мерцание = чередование двух цветов). Частота обновления монитора составляет 85 Гц, и мы хотели бы, чтобы это было узким местом, а это значит, что перекрашивание всех квадратов может занять максимум 1000/85 = 11 мс.
Моим языком предпочтения для программирования с графическим интерфейсом и графическим интерфейсом является Java, поэтому я попытался создать прототип с AWT, потому что он синхронный (в отличие от Swing). Теперь у меня две проблемы: во-первых, измерения времени показывают, что перекрашивание даже 9 квадратов просто занимает слишком много времени. Мой алгоритм берет желаемую частоту и вычисляет время, в которое система должна перерисовываться заранее, а затем использует цикл (без задержки ожидания / ожидания), который каждый раз проверяет, достигнуто ли следующее «время», и, если это так, проходит по всем циклам. квадраты, чтобы перекрасить их. Теперь я реализовал это так: квадраты представляют собой панели с цветом фона A и содержатся в другой панели с цветом фона B, и мерцание происходит из-за изменения видимости панелей. Я подумал, что это будет быстрее, чем одна панель, которая должна рисовать прямоугольники все время.
У меня нет подходящего инструмента профилирования (я не могу заставить работать Eclipse TPTP или профилировщик NetBeans), поэтому я не уверен, но у меня такое ощущение, что узкое место на самом деле не в перекрашивании, а в цикле ( с условной проверкой и т. д.). Можете ли вы порекомендовать что-нибудь о том, что я должен делать?
Вторая проблема заключается в том, что кажется, что квадраты отображаются сверху вниз. Как будто они разворачиваются очень быстро, но все же заметно. Это неприемлемо. Что мне интересно, хотя, это то, что вызывает это. Это Java / AWT, или Windows, или просто я пишу медленный алгоритм?
Можете ли вы порекомендовать мне кое-что попробовать? Я предпочитаю использовать Java, но я буду использовать C (или что-то еще), если я должен.