私は現在、ソケットサーバーからいくつかのイメージをダウンロードする必要があるプログラムを開発しており、ダウンロード作業は長時間実行されます。だから、私はそれを行うために新しい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スレッド中断]可能な複製(http://stackoverflow.com/questions/2790346/c0x-thread-interruption) – kfsone