UpdateAllViews() из рабочего потока?
У меня есть рабочий поток в классе, который принадлежит ChildView. (Я намерен в конечном итоге переместить это в Doc.) Когда рабочий поток завершит задачу, я хочу, чтобы все представления были обновлены. Как я могу позвонить, чтобы сказать Доку, чтобы он выпустил UpdateAllViews()? Или есть лучший подход?
Спасибо.
Добавлено OP: Я ищу простое решение. Приложение работает на одном компьютере с одним процессором и не требует доступа к сети (или Интернету). Там нет ничего, чтобы вызвать тупик.
Я думаю, что я хотел бы, чтобы рабочий поток отправлял (или отправлял) сообщение для обновления представлений.
Все, что я читаю о многопоточности, кажется намного более сложным, чем то, что мне нужно, и, да, я понимаю, что все эти меры предосторожности необходимы для приложений, работающих в многопроцессорных, многопользовательских, клиент-серверных системах и т. Д. Но ни одно из них не применимо в моем ситуация.
Я просто застрял в получении правильной комбинации получения дескриптора окна, публикации сообщения и ответа на сообщение в правильных функциях и классах для компиляции и функционирования вообще.
1 ответ
UpdateAllViews не является потокобезопасным, поэтому вам необходимо выполнить маршалинг вызова в основной поток. Я предлагаю вам сообщить о событии ручного сброса, чтобы отметить завершение вашего потока и проверить состояние события в обработчике WM_TIMER.
Рекомендуемое чтение: