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