У меня есть приложение для высокоскоростного рендеринга, и я хочу выводить сообщения журнала в отдельное окно .Приложение является многопоточным, и все потоки могут что-то регистрировать в любой момент времени.
Я уже использую консоль для вывода, и это работало нормально!
Я сделал следующее:
- Создание очереди logMessage
- Всякий раз, когда потоку есть что сказать, он блокирует очередь и вставляет свое сообщение в очередь
- Существует a«очищающий» поток , который спит до тех пор, пока какой-то поток не запишет что-либо (акт вызова
log()
в любом потоке, пробуждает очищающий поток), и его задача - сбросить все сообщения журнала в файл и консоль.
Это работало нормально как для ведения журнала файлов, так и для консоли: ни одному из них не кажется, что поток, который они получают для вызовов на печать, отличается от основного потока приложения.Однако любое другое окно, которое вы создаете, имеет значение .Так что теперь поток очистки не работает, когда я пытаюсь напечатать в отдельном окне RichText , которое я создал.
Так что это разочаровывает.Теперь единственное решение, которое кажется, состоит в том, чтобы переместить flush код потока в основной поток (то же самое, что запускает цикл рендеринга), что означает потенциально долгую задержку в отображении кадра(если вы ожидаете блокировки очередей журнала, чтобы их можно было выводить), чего я не хочу.