Obecnie rozwijam program, który musi pobrać kilka obrazów z serwera gniazd, a praca pobierania będzie trwała długo. Tak więc tworzę nowy std::thread
, aby to zrobić.Jak przerwać std :: thread?
Po pobraniu, std::thread
wywoła funkcję członka bieżącej klasy, ale ta klasa prawdopodobnie została zwolniona. Tak, mam wyjątek.
Jak rozwiązać ten problem?
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
}
Witamy w Stack Overflow! Zmieniłem twoje pytanie tak daleko, jak mogłem odgadnąć twój problem. Dodaj jednak wyjaśnienie kodu i opisu, aby zobaczyć je więcej osób mających wiedzę na ten temat. Dokonaj edycji w konkretnym komunikacie o błędzie, który napotykasz, jeśli jest to konieczne, aby zidentyfikować konkretny problem. Powodzenia! – manetsus
Dlaczego nie używasz 'std :: future'? –
Superlokkus
Możliwy duplikat [przerwania wątku C++ 0x] (http://stackoverflow.com/questions/2790346/c0x-thread-interruption) – kfsone