UpdateAllViews() из рабочего потока?

У меня есть рабочий поток в классе, который принадлежит ChildView. (Я намерен в конечном итоге переместить это в Doc.) Когда рабочий поток завершит задачу, я хочу, чтобы все представления были обновлены. Как я могу позвонить, чтобы сказать Доку, чтобы он выпустил UpdateAllViews()? Или есть лучший подход?

Спасибо.


Добавлено OP: Я ищу простое решение. Приложение работает на одном компьютере с одним процессором и не требует доступа к сети (или Интернету). Там нет ничего, чтобы вызвать тупик.

Я думаю, что я хотел бы, чтобы рабочий поток отправлял (или отправлял) сообщение для обновления представлений.

Все, что я читаю о многопоточности, кажется намного более сложным, чем то, что мне нужно, и, да, я понимаю, что все эти меры предосторожности необходимы для приложений, работающих в многопроцессорных, многопользовательских, клиент-серверных системах и т. Д. Но ни одно из них не применимо в моем ситуация.

Я просто застрял в получении правильной комбинации получения дескриптора окна, публикации сообщения и ответа на сообщение в правильных функциях и классах для компиляции и функционирования вообще.

1 ответ

Решение

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

Рекомендуемое чтение:

Другие вопросы по тегам