Re[2]: std::thread, std::condition_variable и dll
От: Doom100500 Израиль  
Дата: 13.06.21 12:16
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>А так что пишет?


Тоже самое.
Но если в фабрику добавить метод release такой:


void WorkerFactory::release() {
    return worker_ptr.reset();
}


И дернуть его из main:


auto w = WorkerFactory::instance();
    std::this_thread::sleep_for(std::chrono::seconds(1));
    w->AddVal("1");
    std::this_thread::sleep_for(std::chrono::seconds(1));
    w->AddVal("2");
    std::this_thread::sleep_for(std::chrono::seconds(1));
    w->AddVal("3");

    std::this_thread::sleep_for(std::chrono::seconds(1));

    //delay();

    WorkerFactory::release();


То всё работает правильно.:

started working thread
got val: 1
got val: 2
got val: 3
break
got val: last value
exit working thread
dtor completed


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