Здравствуйте, remark, Вы писали:
R>А вот с "получает результаты" заминочка. Предложенный вариант не будет работать, т.к. weak_ptr<>::expired() не передаёт видимость данных между потоками, которые освободили ассоциированный shared_ptr, и потоком которому expired() вернул true (кто-то обещал?).
угу, понял.
R>Да и вообще необходимость использования поллинга как-то смущает, почему не сделать просто:
R>R>boost::thread worker ([]()
R>{
R> lengthy_work(...);
R> PostMessage(current_thread_id, WM_WORK_ACCOMPLISHED, work_id, 0);
R>});
R>
В таком варианте смущает возможность удаления адресата PostMessage до вызова PostMessage, во время вызова PostMessage, между PostMessage и получением сообщения — прийдётся предусмотреть проверку "существует ли адресат" и продление жизни адресата на время отправки сообщения.