Каков наилучший способ передачи информации об ошибках из рабочих потоков в CThreadPool? - PullRequest
0 голосов
/ 06 марта 2009

Я недавно обнаружил класс ATTh CThreadPool и был очень доволен этой находкой. Это аккуратный маленький класс, который позаботится о семантике синхронизации, состоящей в том, чтобы иметь несколько рабочих потоков для обработки некоторой очереди запросов. Задачи передаются объекту CThreadPool каким-то внешним процессом.

Теперь предположим, что один из рабочих потоков обнаружил ошибку или имеет исключение. Я не имею в виду тип исключений, когда вы бы хотели, чтобы все ваше приложение просто умерло, но это то, с чем вы хотите справиться более изящно. Изящно я подразумеваю, что заявка может умереть, но мне нужно сделать некоторую работу по очистке и поместить пропущенное сообщение где-нибудь относительно того, почему это произошло.

Как лучше всего передать информацию об ошибке (сообщение, код ошибки, источник и т. Д.) В основной поток, владеющий объектом CThreadPool?

Ответы [ 2 ]

2 голосов
/ 06 марта 2009

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

1 голос
/ 06 марта 2009

Использовать очередь с доступом к синхронизации для регистрации всех ошибок и потока событий потребителя в очереди.

...