Мне нужно отправить код, который будет запускаться в потоке, который выполняет перекачку сообщений, без, определяя несколько пользовательских сообщений.
Что-то вроде Java SwingUtilities.invokeLater()
(Примечание: я уже есть утилита, которая позволяет лямбда быть callbackable)Код запуска в потоке пользовательского интерфейса
Я уже пробовал ::SendMessageCallback & SendAsyncProc
, но обратного вызова вызывается одним и тем же отправителем поток, когда он вызывает ::GetMessage
(т.е. требование для этого api ...)
ATM моя альтернатива заключается в том, чтобы определить пользовательское сообщение (то есть WM_USER_EXECUTE), на которое передается обратный вызов, но для этого требуется, чтобы все целевые объекты были готовы принять это сообщение! Я бы предпочел более общий способ.
QueueUserAPC()? –
@ Мартин, я расследую, спасибо на данный момент, я не знал, что api – MrAduer
@Martin Argh! это делает работу. После того, как APC была поставлена в очередь, ничего не происходит до тех пор, пока поток получателя не войдет в альтернативное состояние (например, вызовом SleepEx с bAlertable TRUE) Очевидно, что внутренности :: GetMessage не оставляют поток в таком состоянии :( – MrAduer