В настоящее время я использую асинхронный обратный вызов для получения данных движения через API-интерфейс датчика Window.Сейчас я хочу проверить функциональность через консольное приложение Windows 10 (НЕ приложение Windows).Чтобы упростить задачу, в настоящее время у меня возникает та же проблема, что и у Как заставить мою программу на C ++ ждать события датчика навсегда и не завершать , где
while(true) { hr = sensor->SetEventSink(pMyEvents); }
запускает событие иЯ получаю непротиворечивые данные, но правильное использование должно быть просто
hr = sensor->SetEventSink(pMyEvents);
, что вызовет событие асинхронно.
Я также использовал CoInitializeEx(NULL, COINIT_MULTITHREADED);
, чтобы разрешить многопоточность в COM.
В комментариях в приведенной выше ссылке SO два пользователя упоминают, что «вы забыли цикл обработки сообщений Windows».Я не хочу иметь графический интерфейс для этой программы, и что более важно, я не понимаю, почему «COM не будет работать без цикла сообщений».Похоже, это относится только к проектам приложений Windows.Может ли кто-нибудь уточнить это и как правильно использовать SetEventSink(ISensorEvent)
, чтобы продолжать получать данные для обычного консольного приложения?
Я подтвердил, что другой код, например для инициализации / декодирования данных, использует синхронный метод -GetData()
.