2011-01-09 2 views
2

На данный момент я использую WaitForSingleObject, чтобы дождаться завершения подзадачи. К сожалению, это заставляет мой GUI запираться. Вместо этого я хотел бы задать обработчик (в потоке GUI), который будет вызываться после завершения потока подзаголовка. Есть ли еще одна функция для этого?Как добавить обработчик событий, когда поток заканчивается в MFC?

ответ

3

Что вы можете сделать, так это позволить последнему, что ваш поток отправляет пользовательское сообщение в ваше окно. Затем обработайте это как обычное сообщение, используя карту сообщений MFC. Если вы не можете изменить код потока, вы можете создать новый поток, который ждет вашего потока, а затем отправит сообщение.

Как вы уже заметили, что это не очень хорошая идея, чтобы запереть GUI нить ...

Edit: Публикация сообщения осуществляется с помощью функции PostMessage, как отметил Ханс в комментариях.

+0

PostMessage, не отправив сообщение. –

+0

@ Hans Passant: Я согласен с вами в том, что это правильный метод использования. Небрежный выбор слов с моей стороны, и я отредактирую свой ответ, чтобы отразить это. – villintehaspam

1

Также можно посмотреть MsgWaitForMultipleObjects (или MsgWaitForMultipleObjectsEx). Они позволяют потоку ждать сообщений о событиях и сообщений служб Windows (проверьте возвращаемое значение, чтобы увидеть, что заставляет вызов возвращаться). Примеры использования должны быть доступны с помощью поиска goodle.

http://msdn.microsoft.com/en-us/library/ms684245(VS.85).aspx

Смежные вопросы