Асинхронные агенты и оконные сообщения - PullRequest
5 голосов
/ 13 сентября 2011

Я сейчас играю с библиотекой асинхронных агентов в Microsoft Concurrency Runtime .Я еще не нашел очевидного способа сообщить, что задача завершена с помощью оконных сообщений или каким-либо другим способом уведомления потока пользовательского интерфейса о завершении работы.

Я знаю, что могу передавать дескрипторы окон и сообщениязначения (WM_xxx) вместе с задачами, и для задачи используйте PostMessage() для сигнализации потока пользовательского интерфейса.Это несколько уродливо, на мой взгляд, и источник ошибки.Если возникает исключение, у меня должен быть обработчик catch, который сигнализирует мой поток пользовательского интерфейса.Это легко забыть, и условие исключения может выполняться не очень часто, поэтому его трудно обнаружить.

В документации говорится о том, как перенести данные обратно в поток пользовательского интерфейса.Он не использует оконные сообщения, но методы опроса.Я считаю глупым устанавливать таймеры для опроса, если задача завершена, когда доступны методы «прерывания»!

Странно, что это не встроено в библиотеку, так как это не крестплатформа библиотеки.Он предназначен для работы в Windows и только в Windows, насколько я понимаю.

Доступна ли эта функция в библиотеке, или мне нужно ее свернуть?

1 Ответ

1 голос
/ 08 июня 2012

Вы можете создать один поток монитора с единственной функцией отслеживания unbounded_buffer для сообщения Windows и соответствующей отправки сообщения.Ваши агенты знают об этом буфере.

...