Есть несколько способов, которыми я могу поместить сообщение для потока GUI.
PostMessage : в соответствии с документацией эти сообщения обрабатываются первыми (перед большинством других сообщений). Если я использую это слишком часто, поток GUI может застрять в обработке только моих сообщений и ничего больше (не будет отвечать на клавиатуру \ мышь и т. Д.). Это слишком высокоприоритетный метод.
SetTimer : сообщения WM_TIMER обрабатываются последними после всего остального, поэтому, если происходит какое-либо рисование (например, если я постоянно перемещаю окно), все время будет потрачено на обработку обычных сообщений, и WM_TIMER тоже сработает поздно.
Это метод с слишком низким приоритетом.
Мне нужно что-то промежуточное, чтобы обработать мое пользовательское сообщение как можно скорее, но при этом оставалось место для остальных сообщений, чтобы графический интерфейс реагировал.
То, что я хотел бы попробовать, это поместить некоторое сообщение, которое будет обработано, в том же порядке, что и обычные сообщения.
Итак, вот вопрос, как я могу это сделать?
Добавлено:
У меня есть один поток, который готовит видеокадры, и он должен уведомить основной поток (UI) о том, что новый кадр готов, и, возможно, отобразить его. В типичном игровом цикле это будет что-то вроде
- обрабатывать сообщения до тех пор, пока очередь не станет пустой
- процесс 1 кадр
- повтор
Но теперь я не могу контролировать цикл сообщений, потому что он может быть в модальном всплывающем окне или меню.