В настоящее время я разрабатываю программу, которая должна загружать некоторые изображения с сервера сокетов, а работа по загрузке будет выполняться долгое время. Итак, я создаю новый std::thread
, чтобы сделать это.Как завершить std :: thread?
После его загрузки std::thread
вызовет функцию-член текущего класса, но этот класс, скорее всего, был выпущен. Итак, я получил исключение.
Как решить эту проблему?
void xxx::fun1()
{
...
}
void xxx::downloadImg()
{
...a long time
if(downloadComplete)
{
this->fun1();
}
}
void xxx::mainProcees()
{
std::thread* th = new thread(mem_fn(&xxx::downloadImg),this);
th->detach();
//if I use th->join(),the UI will be obstructed
}
Добро пожаловать в переполнение стека! Я отредактировал ваш вопрос, насколько я мог догадаться о вашей проблеме. Однако добавьте объяснение кода и описания, чтобы увидеть больше людей со знанием предмета. Измените конкретное сообщение об ошибке, с которым вы сталкиваетесь, в случае необходимости определить конкретную проблему. Удачи! – manetsus
Почему вы не используете 'std :: future'? –
Superlokkus
Возможный дубликат [C++ 0x thread interruption] (http://stackoverflow.com/questions/2790346/c0x-thread-interruption) – kfsone