Асинхронные агенты и оконные сообщения
В настоящее время я играю с библиотекой асинхронных агентов в Microsoft Concurrency Runtime. Я еще не нашел очевидного способа сообщить, что задача завершена с помощью оконных сообщений или каких-либо других средств уведомления потока пользовательского интерфейса о том, что работа завершена.
Я знаю, что могу передать дескрипторы окна и значения сообщений (WM_xxx
) вместе с задачами, и есть задача использовать PostMessage()
сигнализировать поток пользовательского интерфейса. Это несколько уродливо, на мой взгляд, и источник ошибки. Если возникает исключение, я должен иметь обработчик catch, который сигнализирует мой поток пользовательского интерфейса. Это легко забыть, и условие исключения может выполняться не очень часто, поэтому его трудно определить.
В документации рассказывается о том, как перенести данные обратно в поток пользовательского интерфейса. Он не использует оконные сообщения, но методы опроса. Я считаю глупым устанавливать таймеры для опроса, если задача завершена, когда есть доступные методы "прерывания"!
Странно, что это не встроено в библиотеку, так как это не кроссплатформенная библиотека. Он предназначен для работы в Windows и только в Windows, насколько я понимаю.
Доступна ли эта функция в библиотеке, или мне нужно это сделать вручную?
1 ответ
Вы можете создать один поток мониторинга с единственной функцией мониторинга unbounded_buffer для сообщения Windows и соответствующей отправки этого сообщения. Ваши агенты знают об этом буфере.